MySQL数据库基本操作(二)
1. 表结构操作
2. 非空约束
3. 唯一约束
4. 主键约束
5. 自增长
6. 默认约束
添加单列: ALTER TABLE tb1_name ADD [COLUNM] col_name column_definition [FIRST|AFTER col-name]
create table `tb1`( `id` int, `name` varchar(20) ); 例: mysql> ALTER TABLE `tb1` -> ADD `age` INT -> ; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE `tb1` -> ADD `number` INT FIRST -> ; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE `tb1` ADD `aaa` INT after `id`;
添加多列: ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition,...)
例: mysql> ALTER TABLE `tb1` -> add `aa` INT, -> add `bb` INT, -> add `cc` INT -> ; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql>
删除数据表中的列 ALTER TABLE tbl_name DROP [COLUMN] col_name ;
#例: mysql> ALTER TABLE `tb1` -> DROP `aa` -> ; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> ALTER TABLE `tb1` -> DROP `bb`, -> DROP `cc` -> ; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0
表结构操作的补充:
ALTER TABLE `tbname` 增加 :ADD 删除 :DROP 修改 :MODIFY #改列的数据类型 (属性) CHANGE #改列名和数据类型 RENAME #改表名 修改列名 mysql> alter table tb1 change `name` `sex` varchar(20); 修改数据类型 mysql> alter table tb1 modify `age` varchar(20); 修改表名 mysql> ALTER TABLE `tb1` RENAME TO `students`; Query OK, 0 rows affected (0.40 sec)
NOT NULL
字段值不能为空
例: mysql> CREATE TABLE tb1( -> id INT, -> name VARCHAR(20) NOT NULL -> ); Query OK, 0 rows affected (0.01 sec) # 当有非空约束,指定插入,必须加上name。 mysql> insert into tb1(id) value(1); # 报错 mysql> insert into tb1(id,name) value(1,\'佳能\'); Query OK, 1 row affected (0.01 sec) ## 注意 在mysql 里面,\'\' 不等于null #手动,添加非空约束 (必须这个字段,没有NULL值) mysql> alter table tb1 -> modify id int not null; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 # 取消非空约束 mysql> alter table tb1 -> modify id int ;
唯一约束
确保字段中的值的唯一unique key
例: mysql> create table tb2( -> id int not null unique key, -> name varchar(20) not null -> ); mysql> insert into tb2 value(1,\'张三\'); Query OK, 1 row affected (0.00 sec) mysql> insert into tb2 value(1,\'张三\'); # 报错,违反唯一约束 #添加唯一约束 mysql> ALTER TABLE `tb2` -> ADD unique key(`name`) -> ; #删除唯一约束 mysql> desc tb2; mysql> alter table tb2 -> drop key name; #联合唯一 mysql> alter table tb2 -> add aa int, -> add bb int; mysql> alter table tb2 -> add unique key (aa,bb); mysql> insert into tb2 value(4,\'佳能\',1,2); mysql> insert into tb2 value(5,\'哈哈\',1,2); ERROR 1062 (23000): Duplicate entry \'1-2\' for key \'aa\' # 删除联合唯一 (show create table tb2;) alter table tb2 drop key aa;
主键保证记录的唯一性, 唯一标识每一条数据主键自动为NOT NULL
每张数据表只能存在一个主键NOT NULL + UNIQUE KEY
一个UNIQUE KEY
又是一个NOT NULL
的时候,那么它被当做PRIMARY KEY
主键当一张表里没有一个主键的时候,第一个出现的非空且为唯一的列被视为有主键。
#主键,就是可以数据表中,可以唯一标识,一条数据。就好像身份证一样。 mysql> create table tb3( -> id int primary key, -> name varchar(20) not null -> ); mysql> desc tb3; mysql> insert into tb3 value(1,\'张三\'); Query OK, 1 row affected (0.27 sec) mysql> insert into tb3 value(1,\'张三\'); ERROR 1062 (23000): Duplicate entry \'1\' for key \'PRIMARY\' #删除主键约束 mysql> alter table tb3 -> drop primary key; # 一个表里面,只有一个主键 mysql> desc tb3; #添加主键约束 mysql> alter table tb3 -> add primary key(id); #联合主键 mysql> create table tb4( -> id_a int , -> id_b int, -> content varchar(20), -> primary key(id_a,id_b) -> ); mysql> desc tb4; #删除主键约束 mysql> alter table tb4 -> drop primary key; #添加联合主键 mysql> alter table tb4 -> add primary key(id_a,id_b);
自增长AUTO_INCREMENT
AUTO_INCREMENT
自动编号,一般与主键组合使用。一个表里面只有一个自增默认情况下,起始值为1,每次的增量为1。当插入记录时,如果为AUTO_INCREMENT
数据列明确指定了一个数值,则会出现两种情况,
情况一,如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;
情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。(可以调大,不可以缩小)
例: mysql> create table tb5( -> id int primary key auto_increment, -> name varchar(20) -> )auto_increment =100; # 如果不写,默认从1开始 mysql> desc tb5; mysql> insert into tb5(name) values(\'张三\'),(\'李四\'); mysql> select * from tb5; #auto_increment值,可以调大 insert into tb5(id,name) values(110,\'王五\'); mysql> select * from tb5; #不可以调小 insert into tb5(id,name) values(108,\'王八\'); insert into tb5(name) values(\'田七\'); mysql> select * from tb5; #删除自动增长 mysql> alter table tb5 -> modify id int; #增加自动增长auto_increment mysql> alter table tb5 -> modify id int auto_increment;
默认约束DEFAULT
DEFAULT
(默认约束)初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予默认值。
添加/删除默认约束
ALTER TABLE tbl_name ALTER [COLUMN] col_name
{SET DEFAULT literal | DROP DEFAULT}
#例: mysql> create table tb6( -> id int primary key auto_increment, -> name varchar(20) not null, -> age int not null default 18 -> ); mysql> desc tb6; mysql> insert into tb6(name) values(\'张三\'),(\'李四\'),(\'王五\'); mysql> select * from tb6; #删除default mysql> alter table tb6 -> modify age int not null; mysql> desc tb6; #(2) mysql> alter table tb6 -> alter age drop default; #添加default mysql> alter table tb6 -> modify age int default 20; mysql> desc tb6; #(2) mysql> alter table tb6 -> alter age set default 21;
作业
创捷一张 学生表(
学号 主键
名字 不为空 唯一
性别
年龄 不为空
)
1. 删除名字的唯一
2. 添加性别,不为空、默认为男
3. 设置年龄 默认为18