1. 某些列不插入内容,值是多少?
自动填充NULL
2. NOT NULL是干嘛的?
不能为NULL类型,因为NULL类型查询的时候需要加语句 IS NULL 或者IS NOT NULL
效率低,查询速度慢,开发中我们一般不可以设置为默认的能插入NULL类型。
所以会使用NOT NULL来限制使用NULL类型。
3. 既然没有默认值了,我们如何手动设置默认值?
使用哪个DEFAULT
1 -- 设置两个列id和name 2 -- id内容不能为NULL 默认值0 3 -- name内容不能为NULL 默认值空字符串 4 CREATE TABLE t14 ( 5 id INT NOT NULL DEFAULT 0, 6 name CHAR(10) NOT NULL DEFAULT '' 7 ); 8 INSERT INTO t14 VALUES (1,'listi'); 9 INSERT INTO t14 (id) VALUES (2); 10 SELECT * FROM t14; 11 SELECT * FROM t14 WHERE name='';
1. 什么是主键?
PRIMARY KEY,能够区分每一行的列
以会员为例
我们为了区分他们,往往给每一个会员加一个独一五二的会员号,这个会员号就是主键,主要在唯一
的号码上加。
2. 设置主键后一定不能重复
不重复的是不是都可以是主键?比如说手机号,email,也不重复。
当然不是,它还具备这么几个特征,有顺序,并且递增或者递减的一般才会加主键。
一张表中,不声明主键也可以,取决于你表中数据有没有有顺序递增或者递减的列数据。
3. 两种声明主键的方式:
1 -- 在需要加主键的后面跟着主键语句 2 CREATE TABLE t15 ( 3 id INT PRIMARY KEY, 4 name CHAR(5) 5 ); 6 -- 在语句的最后再声明一行声明哪个列名要加主键 7 CREATE TABLE t16 ( 8 id INT, 9 name CHAR(5), 10 PRIMARY KEY(id) 11 ); 12 -- 不可以添加重复的信息 13 INSERT INTO t15 VALUES (3,'list'); 14 INSERT INTO t15 VALUES (3,'list');
4.主键往往和 AUTO_INCREMENT 一起使用
这并不意味着,他们两个必须要绑定在一起使用,我们一般会把自增的列加上主键,提升效率。
但有时候,我们非要用email做主键,让email这一个列提高效率,也是可以的。
5.AUTO_INCREMENT不可单独使⽤
使用自增选项,必须要有索引设置,否则会报错。
索引还有,普通索引INDEX,唯一UNIQUE,全文索引FULLTEXT。
表创建完毕后,能否添加 1 个列?删除 1 个列?修改一个列?
新增一个列,或者删除修改一个列,这属于 DDL 操作,数据库定义语言。
区分数据的增删改,插⼊数据是指表中的数据,不会影响到表的结构。
新建user_info 表:
1 -- id,名字,性别,体重 2 CREATE TABLE user_info( 3 id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 4 username CHAR(20) NOT NULL DEFAULT '', 5 gender TINYINT UNSIGNED NOT NULL DEFAULT 0, 6 weight TINYINT UNSIGNED NOT NULL DEFAULT 0 7 )ENGINE=MyISAM DEFAULT CHARSET=utf8;
语法:
ALTER TABLE 表名 ADD 列名 列类型 列属性... (新列 默认在表的最后)
ALTER TABLE 表名 ADD 列名 列类型 列属性... AFTER 列名 (新列出现指定列后)
ALTER TABLE 表名 ADD 列名 列类型 列属性... FIRST (新列为第 1 列)
ALTER TABLE 表名 CHANGE 旧列名 新列名 新类型 列属性....
ALTER TABLE 表名 MODIFY 列名 新属性....
ALTER TABLE 表名 DROP [COLUNM] 列名
1 -- 1.添加一个列,默认新增列追加在表的最后 2 ALTER TABLE user_info ADD height TINYINT UNSIGNED NOT NULL DEFAULT 0; 3 -- 查看表结构 4 DESC user_info; 5 -- 2.删除身高列 6 ALTER TABLE user_info DROP height; 7 DESC user_info; 8 -- 3.再增加身⾼列,放在username后面 9 ALTER TABLE user_info ADD height TINYINT NOT NULL DEFAULT 0 AFTER username; 10 DESC user_info; 11 -- 4.现在人的身高越来越高,255的TINYINT已经不够存了,我们需要改变列类型,改成SMALLINT 12 -- 使用CHANGE可以将列名一起修改了. 13 ALTER TABLE user_info CHANGE height shengao SMALLINT NOT NULL DEFAULT 0; 14 DESC user_info; 15 -- 5.MODIFY 也可以修改列,跟CHANGE区别在于,MODIFY不可以修改列名 16 ALTER TABLE user_info MODIFY shengao TINYINT NOT NULL DEFAULT 0; 17 DE