MySQL列的默认值主键索引与自增 删除增加与修改

时间:2021-04-27 09:55:20

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