MySQL----主键(PRIMARY KEY)和自增(AUTO INCREMENT)

UNSIGNED------无符号,没有负数,从0开始
ZEROFILL-------零填充,当数据的显示长度不够的时候可以使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED
NOT NULL------非空约束,也就是插入值的时候这个字段必须要给值,值不能为空
DEFAULT------默认值,如果插入记录的时候没有给字段赋值,则使用默认值
PRIMARY KEY------主键,标识记录的唯一性,值不能重复,一个表只能有一个主键,自动禁止为空
AUTO_INCREMENT------自动增长,只能用于数值列,而且配合索引使用,默认起始值从1开始,每次增长1
UNIQUE KEY------唯一性,一个表中可以有多个字段是唯一索引,同样的值不能重复,但是NULL值除外
FOREIGN KEY------外键约束

-- 测试主键
CREATE TABLE test_primary_key(
    id INT UNSIGNED PRIMARY KEY,
    username VARCHAR(20)
);
INSERT test_primary_key(id,username) VALUES(1,'NAME1');
INSERT test_primary_key(id,username) VALUES(1,'name2');
INSERT test_primary_key(username) VALUES('name3');

CREATE TABLE test_primary_key1(
    id INT UNSIGNED KEY,
    username VARCHAR(20)
);

CREATE TABLE test_primary_key2(
    id INT UNSIGNED,
    username VARCHAR(20),
    PRIMARY KEY(id)
);

-- CREATE TABLE test_primary_key3(
--     id INT UNSIGNED PRIMARY KEY,
--     courseId INT UNSIGNED PRIMARY KEY,
--     username VARCHAR(20),
--     email VARCHAR(50)
-- );

-- 复合主键
CREATE TABLE test_primary_key3(
    id INT UNSIGNED,
    courseId VARCHAR(20),
    username VARCHAR(20),
    email VARCHAR(50),
    PRIMARY KEY(id,courseId)  ---<<---相当于通过id 和 courseId 都可以定位到要查询的记录
);
-- 1-a
INSERT test_primary_key3(id,courseId,username,email)
VALUES(1,1,'xiaoming','8@qq.com');

INSERT test_primary_key3(id,courseId,username,email)
VALUES(2,1,'xiaohong','71946@qq.com');

INSERT test_primary_key3(id,courseId,username,email)
VALUES(3,1,'张三','3946@qq.com');

INSERT test_primary_key3(id,courseId,username,email)
VALUES(4,1,'李四','17@qq.com');

-- 测试AUTO_INCREMENT

CREATE TABLE test_auto_increment(
id INT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20)
);
-- id INT UNSIGNED KEY AUTO_INCREMENT 中有AUTO_INCREMENT时一定要有KEY, 否则会报错.

INSERT test_auto_increment(username) VALUES('A'); INSERT test_auto_increment(username) VALUES('B'); INSERT test_auto_increment(username) VALUES('C'); INSERT test_auto_increment(id,username) VALUES(NULL,'E'); INSERT test_auto_increment(id,username) VALUES(DEFAULT,'F');
INSERT test_auto_increment(id,username) VALUES('','M');--报错, 不能为'';
INSERT test_auto_increment(id,username) VALUES(15,'G');--此刻id从15开始编号

 

mysql> select * from test_primary_key3;
+----+----------+----------+-------------+
| id | courseId | username | email       |
+----+----------+----------+-------------+
|  1 | 1        | xiaoming | 8@qq.com    |
|  2 | 1        | ??       | 3946@qq.com |
|  4 | 1        | 李四     | 17@qq.com   |
+----+----------+----------+-------------+
3 rows in set (0.00 sec)

mysql> CREATE TABLE test_auto_increment(
    -> id INT UNSIGNED KEY AUTO_INCREMENT,
    -> username VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> DESC test_auto_increment;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | YES  |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)



INSERT test_auto_increment(username) VALUES('A');
INSERT test_auto_increment(username) VALUES('B');
INSERT test_auto_increment(username) VALUES('C');

INSERT test_auto_increment(id,username) VALUES(NULL,'E');
INSERT test_auto_increment(id,username) VALUES(DEFAULT,'F');
INSERT test_auto_increment(id,username) VALUES(15,'G');

 

mysql> SELECT * FROM test_auto_increment;
+----+----------+
| id | username |
+----+----------+
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | E |
| 5 | F |
| 15 | G |
+----+----------+
6 rows in set (0.00 sec)

 

posted @ 2019-09-20 16:09  Streamice96  阅读(4100)  评论(0编辑  收藏  举报