史上最简单的MySQL教程

来源:互联网 发布:母婴用品淘宝店 编辑:程序博客网 时间:2024/04/26 02:56

安装:http://blog.csdn.net/qq_35246620/article/details/71105110

参考:http://blog.csdn.net/qq_35246620/article/details/70823903

SQL语句 - - database

  • 创建数据库:create database walter charset utf8;
  • 修改字符集:alter database walter charset utf8;
  • 删除数据库:drop database walter;

SQL语句 - - table

  • 新增表:
use walter;create table if not exists student(--隐式指定表所属的数据库id int,name varchar(10))charset utf8;
create table if not exists walter.student(--显式指定表所属的数据库id int,name varchar(10))charset utf8;
  • 查看创建表语句
    • show create table student;
+---------+------------------------------------------------------+| Table   | Create Table                                         |                                                                           +---------+------------------------------------------------------+| student | CREATE TABLE `student` (  `id` int(11) NOT NULL COMMENT '学号',  `name` varchar(20) DEFAULT NULL COMMENT '姓名') ENGINE=InnoDB DEFAULT CHARSET=utf8 |+---------+------------------------------------------------------+
  • 描述表

desc student;

+-------+-------------+------+-----+---------+-------+| Field | Type        | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id    | int(11)     | YES  |     | NULL    |       || name  | varchar(20) | YES  |     | NULL    |       |+-------+-------------+------+-----+---------+-------+
  • 查询表
    查看全部:show tables;
    查看部分:show tables like 'student';

  • 更新表
    修改表本身

    • 修改表名:rename table student to stu;
    • 修改表选项:alter table student 表选项[=] 值;

    新增字段

    • alter table + 表名 + add + [column] + 字段名 + 数据类型 + [列属性][位置];
    • 其中,位置表示此字段存储的位置,分为first(第一个位置)和after + 字段名(指定的字段后,默认为最后一个位置)。
    • 示例:
      • alter table student add column id int first;
      • alter table student add column course after id;

    修改字段类型

    • alter table + 表名 + modify + 字段名 + 数据类型 + [列属性][位置];
    • 其中,位置表示此字段存储的位置,分为first(第一个位置)和after + 字段名(指定的字段后,默认为最后一个位置).
    • 示例:alter table student modify name char(10) after id;

    重命名字段

    • alter table + 表名 + change + 旧字段名 + 新字段名 + 数据类型 + [列属性][位置];
    • 其中,位置表示此字段存储的位置,分为first(第一个位置)和after + 字段名(指定的字段后,默认为最后一个位置).
    • 示例:alter table student change grade class varchar(10);

    删除字段

    • alter table + 表名 + drop+ 字段名;
    • 示例:alter table student drop age;
    • 注意:如果表中已经存在数据,那么删除该字段会清空该字段的所有数据,而且不可逆,慎用。
  • 删除表
    drop table student1,student2...;


MySQL - - 数据操作

  • 新增数据
    • 给全表字段插入数据,不需要指定字段列表,但要求数据的值出现顺序必须与表中的字段出现的顺序一致,并且凡是非数值数据,都需要用引号(单)括起来。
    • insert into student values(1,’walter’);
    • 给部分字段插入数据,需要选定字段列表,字段列表中字段出现的顺序与表中字段的顺序无关,但值列表中字段值的顺序必须与字段列表中的顺序保持一致。
    • insert into student(name,id)values(‘walter’,1);
  • 查询数据
    • select * from student;
    • select id from student where name = ‘walter’;
  • 更新数据
    • update student set id = 2 where name = ‘walter’;
  • 删除数据
    • delete from student where name = ‘walter’;

MySQL - - 列属性

  • 空属性null
create table student(id int not null,name varchar(20) null --显式声明为空,实际上默认就为空)charset utf8;
  • 列描述comment
    • 没有实际含义,是专门用来描述字段的,其会随着表创建语句自动保存,用来给程序员(数据库管理员)了解数据库使用。
create table student(id name not null comment '学号',name varchar(20) null comment '年龄')charset utf8;
  • 默认值default
    • 某一数据会经常性出现某个具体的值,因此可以在开始的时候就指定好,而在需要真实数据的时候,用户可以选择性的使用默认值。
create table student(id int not null,name varchar(20),sex enum('男','女')default'男')charset utf8;

desc student;

+-------+-----------------+------+-----+---------+-------+| Field | Type            | Null | Key | Default | Extra |+-------+-----------------+------+-----+---------+-------+| id    | int(11)         | YES  |     | NULL    |       || name  | varchar(20)     | YES  |     | NULL    |       || sex   | enum('男','女') | YES  |     | 男      |       |+-------+-----------------+------+-----+---------+-------+
insert into student (id,name)values(1,'walter');insert into student(id,name,sex)values(2,'graham','女');insert into student(id,name,sex)values(3,'Jack',default);

select * from stu;

+------+--------+------+| id   | name   | sex  |+------+--------+------+|    1 | walter | 男   ||    2 | graham | 女   ||    3 | Jack   | 男   |+------+--------+------+

MySQL - - 主键

  • 增加主键
    • 主键的最大特点:
      • not null,插入数据时一定要给值,在没有声明自增长前,就要手动赋值
      • 不重复,插入数据时不能重复,唯一性unique
create table student(id int primary key,--在创建表的时候,直接声明主键,默认not nullname varchar(20)--默认null)charset utf8;
create table student(id int,--此时默认nullcourse int,--此时默认nullname varchar(20),primary key(id,course)-- 增加主键限制,学号和课程编号应该是对应的,具有唯一性,之后id,course为not null)charset utf8;
create table student(id int,--此时默认nullcourse int,--此时默认nullname varchar(20))charset utf8;--追加主键,之后主键为not nullalter table student modify id int primary key;--不推荐,只能声明一个字段,而且再声明报错:ERROR 1068 (42000): Multiple primary key definedalter table student add primary key(id,course);--推荐,一次可以声明多个字段为主键,之后也无法再声明,除非删除主键(所有),再重新声明。
  • 删除主键&更新主键
    • 对于主键,没有办法直接更新,主键必须先删除然后才能更新。
    • alter table stu drop primary key;
  • 主键约束
    • 主键对应的字符中的数据不允许重复,如果重复,则数据操作(增改)失败。

MySQL - - 自动增长auto_increment

  • 自动增长
    • 搭配主键使用。
    • 自动增长,当插入数据时对应的字段,不给值,或者是默认值,或者是null的时候,就会自动的被系统触发,系统会从当前字段中取出已有的最大值再进行+1操作,得到新的字段值
    • 任何字段要做自增长,前提其本身必须是一个索引,即key栏有值。
    • 自增长字段必须是数字(整形),
    • 每张表最多有一个自增长字段。
create table student(id int primary key auto_increment,--not nullprimary key、auto_incrementname varchar(20) )charset utf8;
+-------+-------------+------+-----+---------+----------------+| Field | Type        | Null | Key | Default | Extra          |+-------+-------------+------+-----+---------+----------------+| id    | int(11)     | NO   | PRI | NULL    | auto_increment || name  | varchar(20) | YES  |     | NULL    |                |+-------+-------------+------+-----+---------+----------------+
  • 使用自增长
    • 当自增长不给值、给定的值为null、或者default的时候,就会触发自动增长。
insert into student(name)values('walter');--不给值,自动给id赋值1insert into student values(null,'walter');--null,自动给id赋值2insert into student values(default,'walter');--default,自动给id赋值3
+----+--------+| id | name   |+----+--------+|  1 | walter ||  3 | walter ||  4 | walter ||  5 | walter |+----+--------+
  • 修改自增长当前值
    • 自增长如果是涉及到字段改变,就必须先删除自增长,然后再增加自增长,因为每张表只能有一个自增长字段。
    • 如果修改当前自增长字段已经存在的值,则只能修改比当前已有自增长字段中的最大值更大,不能更小,因为更小不生效。
    • alter table student auto_increment = 值
    • 注意:当修改自增长小于当前自增长字段中的最大值时,虽然显示SQL语句执行成功,但是实际上并没有修改成功。
  • 查看自增长
    • show variables like ‘auto_increment%’
+--------------------------+-------+| Variable_name            | Value |+--------------------------+-------+| auto_increment_increment | 1     || auto_increment_offset    | 1     |+--------------------------+-------+
  • 修改自增长初始值
    • 会话级别,影响到整个数据库,不止单张表。
    • set auto_increment_increment = 每次初始值
  • 删除自增长
  • alter table student modify id int;

MySQL - - 唯一键unique

  • 特点:
    • 检测插入的数据是否和表里的重复
    • 如果字段没有声明not null,那么default null,而且不算重复。
    • 唯一键与主键本质相同,区别在于,唯一键允许字段值为空,并且允许多个空置同时存在。
    • 如果字段声明not null,再声明为unique,那么这个字段等效primary key.
  • 作用:每张表只能有一个主键,唯一键就是用来解决表中多个字段需要具有唯一性的问题。
  • 增加唯一键
create table student(id int unique[key],--default nullname varchar(20))charset utf8;
create table student(id int,name varchar(20),unique key(id) --default null)charset utf8;
create table student(id int,name varchar(20))charset utf8;alter table student add unique key(id); --default null
+-------+-------------+------+-----+---------+-------+| Field | Type        | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id    | int(11)     | YES  | UNI | NULL    |       || name  | varchar(20) | YES  |     | NULL    |       |+-------+-------------+------+-----+---------+-------+
create table student(id int not null,name varchar(20))charset utf8;alter table student add unique key(id); --not null
+-------+-------------+------+-----+---------+-------+| Field | Type        | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id    | int(11)     | NO   | PRI | NULL    |       || name  | varchar(20) | YES  |     | NULL    |       |+-------+-------------+------+-----+---------+-------+
  • 删除唯一键&更新唯一键
    • 在更新唯一键的时候,可以不用先删除唯一键,因为表的唯一键允许有多个。
    • 删除:alter table student drop index id;

MySQL - - 索引 index

  • 主键索引:primary key
  • 唯一键索引:unique key
  • 全文索引:fulltext index
  • 普通索引:index

MySQL - - 关系

  • 一对一
    • 一张表的一条记录只能与另外一张表的一条记录相对应,反之亦然。
  • 一对多/多对一
    • 国家 - - 城市
    • 城市 - - 国家
  • 多对多

    • *
原创粉丝点击