MySQL_02_数据表操作

数据表的整体约束总结

-- 创建表小结
CREATE TABLE [IF NOT EXISTS] tbl_name(
	
--	字段名称 字段类型 [UNSIGNED|ZERFILL] [NOT NULL] [DEFAULT 默认值] [[PRIMARY] KEY | UNIQUE [KEY]] [AUTO_INCREMENT] 
--  自增长一定是和主键来一起使用
	
)ENGINE=INNODE CHARSET=UTF8 AUTO_INCREMENT=100;

测试主键 KEY

主键是唯一的,非空的值

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

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

mysql> SHOW CREATE TABLE user1;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------+
| user1 | CREATE TABLE `user1` (
  `id` int NOT NULL,
  `username` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> INSERT user1 VALUES(1,'KING');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT user1 VALUES(12,'QUEEN');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM user1;
+----+----------+
| id | username |
+----+----------+
|  1 | KING     |
| 12 | QUEEN    |
+----+----------+
2 rows in set (0.00 sec)

mysql> INSERT user1 VALUES(12,'QUN');
ERROR 1062 (23000): Duplicate entry '12' for key 'user1.PRIMARY'
mysql> select * from user1 where id = 1;
+----+----------+
| id | username |
+----+----------+
|  1 | KING     |
+----+----------+
1 row in set (0.00 sec)

测试复合主键

mysql> CREATE TABLE user2(
    -> 
    -> id INT,
    -> username VARCHAR(20),
    -> card CHAR(18),
    -> PRIMARY KEY(id,card) ---- 复合主键 多字段主键
    -> 
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> DESC user;
+----------+-------------------------------+------+-----+---------+-------+
| Field    | Type                          | Null | Key | Default | Extra |
+----------+-------------------------------+------+-----+---------+-------+
| id       | smallint                      | YES  |     | NULL    |       |
| username | varchar(20)                   | YES  |     | NULL    |       |
| age      | tinyint                       | YES  |     | NULL    |       |
| sex      | enum('鐢','濂','淇濆瘑')      | YES  |     | NULL    |       |
| email    | varchar(50)                   | YES  |     | NULL    |       |
| addr     | varchar(200)                  | YES  |     | NULL    |       |
| birth    | year                          | YES  |     | NULL    |       |
| salary   | float                         | YES  |     | NULL    |       |
| tel      | int                           | YES  |     | NULL    |       |
| married  | tinyint(1)                    | YES  |     | NULL    |       |
+----------+-------------------------------+------+-----+---------+-------+
10 rows in set (0.00 sec)

mysql> DESC user2;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   | PRI | NULL    |       |
| username | varchar(20) | YES  |     | NULL    |       |
| card     | char(18)    | NO   | PRI | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> INSERT user2 VALUES(1,'KING','111');
Query OK, 1 row affected (0.01 sec)
-- 此时这里并不是叫重复的记录 因为 后面的card并不相同 也就是两个不可以同时相等
mysql> INSERT user2 VALUES(1,'queen','112');
Query OK, 1 row affected (0.01 sec)

mysql> CREATE TABLE user3(
    -> 
    -> id INT,
    -> username VARCHAR(20),
    -> 
    -> );
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 6
mysql> CREATE TABLE user3(  id INT, username VARCHAR(20)  );
Query OK, 0 rows affected (0.00 sec)

还是测试主键

mysql> CREATE TABLE user3(  id INT, username VARCHAR(20)  );
Query OK, 0 rows affected (0.00 sec)

mysql> DESC user3;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | YES  |     | NULL    |       |
| username | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> DROP TABLE user3;
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE user3(
    -> 
    -> id INT KEY,
    -> username VARCHAR(20)
    -> 
    -> );
Query OK, 0 rows affected (0.00 sec)

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

mysql> CREATE TABLE user4(
    -> 
    -> id INT,
    -> username VARCHAR(20) KEY
    -> 
    -> );
Query OK, 0 rows affected (0.00 sec)

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

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

测试自增长 AUTO_INCREMENT

一个表中只能有一个自增长字段,且必须配合主键使用,只对整数列、整数串有意义,对字符串没有意义

mysql> DESC user5;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | smallint    | NO   | PRI | NULL    | auto_increment |
| username | varchar(20) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> INSERT user5 VALUES(1,'king');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT user5 VALUES(1,'queen');
ERROR 1062 (23000): Duplicate entry '1' for key 'user5.PRIMARY'
mysql> INSERT user5(username) VALUES('queen');
Query OK, 1 row affected (0.00 sec)

mysql> select * from user5;
+----+----------+
| id | username |
+----+----------+
|  1 | king     |
|  2 | queen    |
+----+----------+
2 rows in set (0.00 sec)

mysql> INSERT user5(username) VALUES('wangzi');
Query OK, 1 row affected (0.00 sec)

mysql> select * from user5;
+----+----------+
| id | username |
+----+----------+
|  1 | king     |
|  2 | queen    |
|  3 | wangzi   |
+----+----------+
3 rows in set (0.00 sec)

mysql> SHOW CREATE TABLE user5;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                      |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user5 | CREATE TABLE `user5` (
  `id` smallint NOT NULL AUTO_INCREMENT,
  `username` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> INSERT user5 VALUES(DEFAULT,'king2'); -- 这里也可以写NULL,都可以自增长1。
Query OK, 1 row affected (0.00 sec)

mysql> select * from user5;
+----+----------+
| id | username |
+----+----------+
|  1 | king     |
|  2 | queen    |
|  3 | wangzi   |
|  4 | king2    |
+----+----------+
4 rows in set (0.00 sec)

修改自增长的值

mysql> DESC user6;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | smallint    | NO   | PRI | NULL    | auto_increment |
| username | varchar(20) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> SHOW CREATE TABLE user6;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                        |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user6 | CREATE TABLE `user6` (
  `id` smallint NOT NULL AUTO_INCREMENT,
  `username` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> ALTER TABLE user6 AUTO_INCREMENT = 500; -- 修改自增长的值
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE user6;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                        |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user6 | CREATE TABLE `user6` (
  `id` smallint NOT NULL AUTO_INCREMENT,
  `username` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=500 DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

测试非空 NOT NULL

mysql> DESC user7;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int unsigned     | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | NO   |     | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
| age      | tinyint unsigned | YES  |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> INSERT user7(username,password) VALUES('king','nihao woshiguowang');
Query OK, 1 row affected (0.01 sec)

mysql> select * from user7;
+----+----------+--------------------+------+
| id | username | password           | age  |
+----+----------+--------------------+------+
|  1 | king     | nihao woshiguowang | NULL |
+----+----------+--------------------+------+
1 row in set (0.00 sec)

mysql> INSERT user7(username,password,age) VALUES('king','nihao woshiguowang',32);
Query OK, 1 row affected (0.00 sec)

mysql> select * from user7;
+----+----------+--------------------+------+
| id | username | password           | age  |
+----+----------+--------------------+------+
|  1 | king     | nihao woshiguowang | NULL |
|  2 | king     | nihao woshiguowang |   32 |
+----+----------+--------------------+------+
2 rows in set (0.00 sec)

mysql> INSERT user7(username,password) VALUES('king',NULL); --若有NOT NULL限制,输入NULL或不输入会报错
ERROR 1048 (23000): Column 'password' cannot be null

唯一性约束 UNIQUE [KEY] (KEY可省略)

mysql> CREATE TABLE user8(
    -> 
    -> id INT UNSIGNED KEY AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL,
    -> password CHAR(32) NOT NULL,
    -> age TINYINT UNSIGNED DEFAULT 18,
    -> addr VARCHAR(50) NOT NULL DEFAULT 'BEIJING',
    -> sex ENUM('NAN','NV','保密') NOT NULL DEFAULT 'NAN'
    -> 
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> DESC user8;
+----------+---------------------------+------+-----+---------+----------------+
| Field    | Type                      | Null | Key | Default | Extra          |
+----------+---------------------------+------+-----+---------+----------------+
| id       | int unsigned              | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)               | NO   |     | NULL    |                |
| password | char(32)                  | NO   |     | NULL    |                |
| age      | tinyint unsigned          | YES  |     | 18      |                |
| addr     | varchar(50)               | NO   |     | BEIJING |                |
| sex      | enum('NAN','NV','保密')   | NO   |     | NAN     |                |
+----------+---------------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

mysql> INSERT user8(username,password) VALUES('king','passwordL'); 
Query OK, 1 row affected (0.00 sec)

mysql> select * from user8;
+----+----------+-----------+------+---------+-----+
| id | username | password  | age  | addr    | sex |
+----+----------+-----------+------+---------+-----+
|  1 | king     | passwordL |   18 | BEIJING | NAN |
+----+----------+-----------+------+---------+-----+
1 row in set (0.00 sec)

mysql> INSERT user8 VALUES('queen','passwordL','pass',23,'上海','NV'); 
ERROR 1366 (HY000): Incorrect integer value: 'queen' for column 'id' at row 1
mysql> INSERT user8 VALUES(2,'queen','passwordL','pass',23,'上海','NV'); 
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql> INSERT user8 VALUES(2,'queen','pass',23,'上海','NV'); 
Query OK, 1 row affected (0.00 sec)

mysql> select * from user8;
+----+----------+-----------+------+---------+-----+
| id | username | password  | age  | addr    | sex |
+----+----------+-----------+------+---------+-----+
|  1 | king     | passwordL |   18 | BEIJING | NAN |
|  2 | queen    | pass      |   23 | 上海    | NV  |
+----+----------+-----------+------+---------+-----+
2 rows in set (0.00 sec)

mysql> INSERT user8 VALUES(3,'queen','pass',DEFAULT,DEFAULT,'NV');
Query OK, 1 row affected (0.00 sec)

mysql> select * from user8;
+----+----------+-----------+------+---------+-----+
| id | username | password  | age  | addr    | sex |
+----+----------+-----------+------+---------+-----+
|  1 | king     | passwordL |   18 | BEIJING | NAN |
|  2 | queen    | pass      |   23 | 上海    | NV  |
|  3 | queen    | pass      |   18 | BEIJING | NV  |
+----+----------+-----------+------+---------+-----+
3 rows in set (0.00 sec)

测试唯一性约束

-- 测试唯一性约束
-- primary key = unique +  not null 
-- NULL 不算重复
mysql> CREATE TABLE user9(
    -> 
    -> id INT UNSIGNED KEY AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL UNIQUE,
    -> card CHAR(18) UNIQUE
    -> 
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> 
mysql> DESC user9;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)  | NO   | UNI | NULL    |                |
| card     | char(18)     | YES  | UNI | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> INSERT user9(username) VALUES('A');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT user9(username) VALUES('A1');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM user9;
+----+----------+------+
| id | username | card |
+----+----------+------+
|  1 | A        | NULL |
|  2 | A1       | NULL |
+----+----------+------+
2 rows in set (0.00 sec)

mysql> INSERT user9(username,card) VALUES('B1','111');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT user9(username,card) VALUES('B2',null);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT user9(username,card) VALUES('B3',null);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM user9;
+----+----------+------+
| id | username | card |
+----+----------+------+
|  1 | A        | NULL |
|  2 | A1       | NULL |
|  3 | B1       | 111  |
|  4 | B2       | NULL |
|  5 | B3       | NULL |
+----+----------+------+
5 rows in set (0.00 sec)


修改表结构

修改表结构

修改表名

  • ALTER TABLE tbl_name RENAME[TO|AS]new_name 这里的AS和TO都可以省略
  • RENAME TABLE tbl_name TO new_name 这里的TO不可以省略
mysql> CREATE TABLE user10(
    -> 
    -> id SMALLINT UNSIGNED KEY AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL UNIQUE,
    -> password CHAR(32) NOT NULL,
    -> email VARCHAR(50) NOT NULL DEFAULT '234235345@qq.com',
    -> age TINYINT UNSIGNED DEFAULT 18,
    -> sex ENUM('男','女','保密') DEFAULT '保密',
    -> addr VARCHAR(200) NOT NULL DEFAULT 'BEIJING',
    -> salary FLOAT(6,3),
    -> regTime INT UNSIGNED, -- 注册时间
    -> face CHAR(100) NOT NULL DEFAULT 'default.JPG'
    -> 
    -> );
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
+----------+----------------------------+------+-----+------------------+----------------+
10 rows in set (0.00 sec)

mysql> ALTER TABLE user10 RENAME user11;
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT * FROM user11;
Empty set (0.00 sec)

mysql> DESC user11;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
+----------+----------------------------+------+-----+------------------+----------------+
10 rows in set (0.00 sec)

mysql> ALTER TABLE user11 RENAME AS user10;
Query OK, 0 rows affected (0.00 sec)

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
+----------+----------------------------+------+-----+------------------+----------------+
10 rows in set (0.01 sec)

mysql> SELECT * FROM user10;
Empty set (0.00 sec)

mysql> RENAME TABLE user10 TO user11;
Query OK, 0 rows affected (0.01 sec)

mysql> DESC user11;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
+----------+----------------------------+------+-----+------------------+----------------+
10 rows in set (0.00 sec)

mysql> RENAME TABLE user11 TO user10;
Query OK, 0 rows affected (0.00 sec)

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
+----------+----------------------------+------+-----+------------------+----------------+
10 rows in set (0.00 sec)

添加字段

  • ALTER TABLE tbl_name ADD 字段名称 字段类型 [完整性约束条件] [FIRST|ALTER 字段名称]
mysql> ALTER TABLE user10 ADD card CHAR(20);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(20)                   | YES  |     | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
11 rows in set (0.00 sec)

mysql> ALTER TABLE user10 ADD test1 VARCHAR(20) NOT NULL UNIQUE;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(20)                   | YES  |     | NULL             |                |
| test1    | varchar(20)                | NO   | UNI | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
12 rows in set (0.00 sec)

mysql> ALTER TABLE user10 ADD test2 VARCHAR(20) NOT NULL FIRST;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| test2    | varchar(20)                | NO   |     | NULL             |                |
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(20)                   | YES  |     | NULL             |                |
| test1    | varchar(20)                | NO   | UNI | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
13 rows in set (0.00 sec)

mysql> ALTER TABLE user10 ADD test3 INT NOT NULL AFTER username;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| test2    | varchar(20)                | NO   |     | NULL             |                |
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| test3    | int                        | NO   |     | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(20)                   | YES  |     | NULL             |                |
| test1    | varchar(20)                | NO   | UNI | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
14 rows in set (0.00 sec)

mysql> ALTER TABLE user10
    -> ADD test4 INT NOT NULL DEFAULT 123 AFTER password,
    -> ADD test5 FLOAT(6,2) FIRST,
    -> ADD test6 SET('A','B','C')
    -> ;
Query OK, 0 rows affected, 1 warning (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 1

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| test5    | float(6,2)                 | YES  |     | NULL             |                |
| test2    | varchar(20)                | NO   |     | NULL             |                |
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| test3    | int                        | NO   |     | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| test4    | int                        | NO   |     | 123              |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(20)                   | YES  |     | NULL             |                |
| test1    | varchar(20)                | NO   | UNI | NULL             |                |
| test6    | set('A','B','C')           | YES  |     | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
17 rows in set (0.01 sec)

删除字段

  • ALTER TABLE tbl_name DROP 字段名称
mysql> ALTER TABLE user10 DROP test6;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| test5    | float(6,2)                 | YES  |     | NULL             |                |
| test2    | varchar(20)                | NO   |     | NULL             |                |
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| test3    | int                        | NO   |     | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| test4    | int                        | NO   |     | 123              |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(20)                   | YES  |     | NULL             |                |
| test1    | varchar(20)                | NO   | UNI | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
16 rows in set (0.00 sec)

mysql> ALTER TABLE user10 
    -> DROP test2,
    -> DROP test5; -- 批量删除某些字段
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| test3    | int                        | NO   |     | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| test4    | int                        | NO   |     | 123              |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(20)                   | YES  |     | NULL             |                |
| test1    | varchar(20)                | NO   | UNI | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
14 rows in set (0.00 sec)

mysql> ALTER TABLE user10
    -> ADD test100 INT UNSIGNED NOT NULL DEFAULT 10 AFTER sex,
    -> DROP test3; -- 我们也可以同时删除和添加表内的字段
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| test4    | int                        | NO   |     | 123              |                |
| email    | varchar(50)                | NO   |     | 234235345@qq.com |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| test100  | int unsigned               | NO   |     | 10               |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(20)                   | YES  |     | NULL             |                |
| test1    | varchar(20)                | NO   | UNI | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
14 rows in set (0.00 sec)

修改字段

  • ALTER TABLE tbl_name MODIFY字段名称 字段类型 [完整性约束条件] [FIRST|LAST字段名称] 改变字段的类型TYPE
mysql> ALTER TABLE user10 MODIFY email VARCHAR(200);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+-------------+----------------+
| Field    | Type                       | Null | Key | Default     | Extra          |
+----------+----------------------------+------+-----+-------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL        | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL        |                |
| password | char(32)                   | NO   |     | NULL        |                |
| test4    | int                        | NO   |     | 123         |                |
| email    | varchar(200)               | YES  |     | NULL        |                |
| age      | tinyint unsigned           | YES  |     | 18          |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密        |                |
| test100  | int unsigned               | NO   |     | 10          |                |
| addr     | varchar(200)               | NO   |     | BEIJING     |                |
| salary   | float(6,3)                 | YES  |     | NULL        |                |
| regTime  | int unsigned               | YES  |     | NULL        |                |
| face     | char(100)                  | NO   |     | default.JPG |                |
| card     | char(20)                   | YES  |     | NULL        |                |
| test1    | varchar(20)                | NO   | UNI | NULL        |                |
+----------+----------------------------+------+-----+-------------+----------------+
14 rows in set (0.00 sec)

mysql> 
mysql> ALTER TABLE user10 MODIFY email VARCHAR(50) NOT NULL DEFAULT '893243534@QQ.COM';
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| test4    | int                        | NO   |     | 123              |                |
| email    | varchar(50)                | NO   |     | 893243534@QQ.COM |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| test100  | int unsigned               | NO   |     | 10               |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(20)                   | YES  |     | NULL             |                |
| test1    | varchar(20)                | NO   | UNI | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
14 rows in set (0.01 sec)

mysql> ALTER TABLE user10 MODIFY card CHAR(18) AFTER test1;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| test4    | int                        | NO   |     | 123              |                |
| email    | varchar(50)                | NO   |     | 893243534@QQ.COM |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| test100  | int unsigned               | NO   |     | 10               |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| test1    | varchar(20)                | NO   | UNI | NULL             |                |
| card     | char(18)                   | YES  |     | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
14 rows in set (0.00 sec)

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| test4    | int                        | NO   |     | 123              |                |
| email    | varchar(50)                | NO   |     | 893243534@QQ.COM |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| test100  | int unsigned               | NO   |     | 10               |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| test1    | varchar(20)                | NO   | UNI | NULL             |                |
| card     | char(18)                   | YES  |     | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
14 rows in set (0.01 sec)
mysql> ALTER TABLE user10 MODIFY test1 CHAR(32) NOT NULL DEFAULT '123' FIRST;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| test1    | char(32)                   | NO   | UNI | 123              |                |
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| test4    | int                        | NO   |     | 123              |                |
| email    | varchar(50)                | NO   |     | 893243534@QQ.COM |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| test100  | int unsigned               | NO   |     | 10               |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(18)                   | YES  |     | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
14 rows in set (0.00 sec)

修改字段的名称

  • ALTER TABLE tbl_name CHANGE 旧字段名称 新字段名称 字段类型 [完整性约束条件] [FIRST|ALTER字段名称]
mysql> ALTER TABLE user10 CHANGE test1 test CHAR(33) NOT NULL DEFAULT '123';
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| test     | char(33)                   | NO   | UNI | 123              |                |
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| test4    | int                        | NO   |     | 123              |                |
| email    | varchar(50)                | NO   |     | 893243534@QQ.COM |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| test100  | int unsigned               | NO   |     | 10               |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(18)                   | YES  |     | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
14 rows in set (0.00 sec)

mysql> ALTER TABLE user10 CHANGE test test1 VARCHAR(200) NOT NULL AFTER username;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| test1    | varchar(200)               | NO   | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| test4    | int                        | NO   |     | 123              |                |
| email    | varchar(50)                | NO   |     | 893243534@QQ.COM |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| test100  | int unsigned               | NO   |     | 10               |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(18)                   | YES  |     | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
14 rows in set (0.00 sec)

mysql> ALTER TABLE user10 CHANGE test test INT(12);
ERROR 1054 (42S22): Unknown column 'test' in 'user10'
mysql> ALTER TABLE user10 CHANGE test test INT;
ERROR 1054 (42S22): Unknown column 'test' in 'user10'
mysql> ALTER TABLE user10 CHANGE test1 test1 INT(12);
Query OK, 0 rows affected, 1 warning (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 1

mysql> DESC user10;
+----------+----------------------------+------+-----+------------------+----------------+
| Field    | Type                       | Null | Key | Default          | Extra          |
+----------+----------------------------+------+-----+------------------+----------------+
| id       | smallint unsigned          | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)                | NO   | UNI | NULL             |                |
| test1    | int                        | YES  | UNI | NULL             |                |
| password | char(32)                   | NO   |     | NULL             |                |
| test4    | int                        | NO   |     | 123              |                |
| email    | varchar(50)                | NO   |     | 893243534@QQ.COM |                |
| age      | tinyint unsigned           | YES  |     | 18               |                |
| sex      | enum('男','女','保密')     | YES  |     | 保密             |                |
| test100  | int unsigned               | NO   |     | 10               |                |
| addr     | varchar(200)               | NO   |     | BEIJING          |                |
| salary   | float(6,3)                 | YES  |     | NULL             |                |
| regTime  | int unsigned               | YES  |     | NULL             |                |
| face     | char(100)                  | NO   |     | default.JPG      |                |
| card     | char(18)                   | YES  |     | NULL             |                |
+----------+----------------------------+------+-----+------------------+----------------+
14 rows in set (0.00 sec)


添加和删除默认值

  • ALTER TABLE tbl_name ALTER 字段名称 SET DEFAULT 默认值 添加默认值
  • ALTER TABLE tbl_name ALTER 字段名称 DROP DEFAULT 删除默认值
mysql> CREATE TABLE user11(
    -> 
    -> id TINYINT UNSIGNED KEY AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL UNIQUE,
    -> age TINYINT UNSIGNED
    -> 
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> DESC user11;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | tinyint unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | NO   | UNI | NULL    |                |
| age      | tinyint unsigned | YES  |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE user11 ALTER age SET DEFAULT 12; 
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user11;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | tinyint unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | NO   | UNI | NULL    |                |
| age      | tinyint unsigned | YES  |     | 12      |                |
+----------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE user11 ADD email VARCHAR(50);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user11;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | tinyint unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | NO   | UNI | NULL    |                |
| age      | tinyint unsigned | YES  |     | 12      |                |
| email    | varchar(50)      | YES  |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> ALTER TABLE user11 ALTER email SET DEFAULT '834464564@QQ.COM';
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user11;
+----------+------------------+------+-----+------------------+----------------+
| Field    | Type             | Null | Key | Default          | Extra          |
+----------+------------------+------+-----+------------------+----------------+
| id       | tinyint unsigned | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)      | NO   | UNI | NULL             |                |
| age      | tinyint unsigned | YES  |     | 12               |                |
| email    | varchar(50)      | YES  |     | 834464564@QQ.COM |                |
+----------+------------------+------+-----+------------------+----------------+
4 rows in set (0.00 sec)

mysql> ALTER TABLE user11 ALTER age DROP DEFAULT;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user11;
+----------+------------------+------+-----+------------------+----------------+
| Field    | Type             | Null | Key | Default          | Extra          |
+----------+------------------+------+-----+------------------+----------------+
| id       | tinyint unsigned | NO   | PRI | NULL             | auto_increment |
| username | varchar(20)      | NO   | UNI | NULL             |                |
| age      | tinyint unsigned | YES  |     | NULL             |                |
| email    | varchar(50)      | YES  |     | 834464564@QQ.COM |                |
+----------+------------------+------+-----+------------------+----------------+
4 rows in set (0.00 sec)

mysql> ALTER TABLE user11 ALTER email DROP DEFAULT;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user11;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | tinyint unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | NO   | UNI | NULL    |                |
| age      | tinyint unsigned | YES  |     | NULL    |                |
| email    | varchar(50)      | YES  |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

添加主键

  • ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]PRIMARY KEY [index_type](字段名称……)
  • ALTER TABLE tbl_name ADD PRIMARY KEY(字段名称); 简单写
mysql> CREATE TABLE user12(
    -> 
    -> id INT
    -> 
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> desc user12;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | YES  |     | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> ALTER TABLE user12 ADD PRIMARY KEY(id);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user12;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | NO   | PRI | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> CREATE TABLE user13(
    -> 
    -> id INT,
    -> card CHAR(18),
    -> username VARCHAR(20) NOT NULL
    -> 
    -> );
Query OK, 0 rows affected (0.00 sec)

添加复合主键

mysql> DESC user13;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | YES  |     | NULL    |       |
| card     | char(18)    | YES  |     | NULL    |       |
| username | varchar(20) | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> ALTER TABLE user12 ADD PRIMARY KEY(id,card);
ERROR 1068 (42000): Multiple primary key defined
mysql> ALTER TABLE user13 ADD PRIMARY KEY(id,card);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user13;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   | PRI | NULL    |       |
| card     | char(18)    | NO   | PRI | NULL    |       |
| username | varchar(20) | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

删除主键

  • ALTER TABLE tbl_name DROP PRIMARY KEY
mysql> DESC user12;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | NO   |     | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> ALTER TABLE user13 DROP PRIMARY KEY;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user13;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   |     | NULL    |       |
| card     | char(18)    | NO   |     | NULL    |       |
| username | varchar(20) | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> desc user12;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | NO   |     | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> ALTER TABLE test12 ADD CONSTRAINT symbol PRIMARY KEY index_type(id);
ERROR 1072 (42000): Key column 'id' doesn't exist in table
mysql> ALTER TABLE user12 ADD CONSTRAINT symbol PRIMARY KEY index_type(id);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user12;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | int  | NO   | PRI | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.00 sec)

删除主键时的一个问题

因为此时id是自增长 如果他是自增长的话 就不能删除此主键 自增长前提这个是主键,所以我们必须先删除自增长 然后才能删除主键。

mysql> CREATE TABLE user14(
    -> 
    -> id INT UNSIGNED KEY AUTO_INCREMENT
    -> 
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> desc user14;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int unsigned | NO   | PRI | NULL    | auto_increment |
+-------+--------------+------+-----+---------+----------------+
1 row in set (0.00 sec)

mysql> ALTER TABLE user14 DROP PRIMARY KEY;
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
mysql> ALTER TABLE user14 MODIFY id INT NSIGNED;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NSIGNED' at line 1
mysql> ALTER TABLE user14 MODIFY id INT UNSIGNED;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user14;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int unsigned | NO   | PRI | NULL    |       |
+-------+--------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> ALTER TABLE user14 DROP PRIMARY KEY;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user14;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int unsigned | NO   |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
1 row in set (0.00 sec)

添加和删除唯一

  • ALTER TABLE tbl_name ADD [constraint [symbol] PRIMARY KEY [index_type][索引名称](字段名称)
  • ALTER TABLE tbl_name DROP index_name
mysql> CREATE TABLE user15(
    -> 
    -> id TINYINT UNSIGNED KEY AUTO_INCREMENT,
    -> username VARCHAR(20) NOT NULL,
    -> card CHAR(18) NOT NULL,
    -> test VARCHAR(20) NOT NULL,
    -> test1 CHAR(32) NOT NULL
    -> 
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> desc user15;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | tinyint unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | NO   |     | NULL    |                |
| card     | char(18)         | NO   |     | NULL    |                |
| test     | varchar(20)      | NO   |     | NULL    |                |
| test1    | char(32)         | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> ALTER TABLE user15 ADD UNIQUE(username);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user15;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | tinyint unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | NO   | UNI | NULL    |                |
| card     | char(18)         | NO   |     | NULL    |                |
| test     | varchar(20)      | NO   |     | NULL    |                |
| test1    | char(32)         | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> ALTER TABLE user15 ADD CONSTRAINT symbol UNIQUE KEY uni_card(card);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user15;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | tinyint unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | NO   | UNI | NULL    |                |
| card     | char(18)         | NO   | UNI | NULL    |                |
| test     | varchar(20)      | NO   |     | NULL    |                |
| test1    | char(32)         | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> SHOW CREATE TABLE user15;
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                                                                                                                                                                                                                          |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user15 | CREATE TABLE `user15` (
  `id` tinyint unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `card` char(18) NOT NULL,
  `test` varchar(20) NOT NULL,
  `test1` char(32) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `uni_card` (`card`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> ALTER TABLE user15 ADD CONSTRAINT symbol UNIQUE KEY mulUni_card(test,test1);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE user15;
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                                                                                                                                                                                                                                                                       |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user15 | CREATE TABLE `user15` (
  `id` tinyint unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `card` char(18) NOT NULL,
  `test` varchar(20) NOT NULL,
  `test1` char(32) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `uni_card` (`card`),
  UNIQUE KEY `mulUni_card` (`test`,`test1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> desc user15;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | tinyint unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | NO   | UNI | NULL    |                |
| card     | char(18)         | NO   | UNI | NULL    |                |
| test     | varchar(20)      | NO   | MUL | NULL    |                |
| test1    | char(32)         | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> ALTER TABLE user15 DROP INDEX username;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user15;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | tinyint unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | NO   |     | NULL    |                |
| card     | char(18)         | NO   | UNI | NULL    |                |
| test     | varchar(20)      | NO   | MUL | NULL    |                |
| test1    | char(32)         | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> ALTER TABLE user15 DROP KEY uni_card;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE user15 DROP KEY mulUni_card;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc user15;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | tinyint unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | NO   |     | NULL    |                |
| card     | char(18)         | NO   |     | NULL    |                |
| test     | varchar(20)      | NO   |     | NULL    |                |
| test1    | char(32)         | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

修改表的储存引擎

  • ALTER TABLE tbl_name ENGINE=存储引擎名称
mysql> show create table
    -> user15;
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                                                                                                                                                  |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user15 | CREATE TABLE `user15` (
  `id` tinyint unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `card` char(18) NOT NULL,
  `test` varchar(20) NOT NULL,
  `test1` char(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> ALTER TABLE user15 user15 ENGINE = MyISAM;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'user15 ENGINE = MyISAM' at line 1
mysql> ALTER TABLE user15 ENGINE = MyISAM;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table user15;
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                                                                                                                                                  |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user15 | CREATE TABLE `user15` (
  `id` tinyint unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `card` char(18) NOT NULL,
  `test` varchar(20) NOT NULL,
  `test1` char(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

设置自增长的值

  • ALTER TABLE tbl_name AUTO_INCREMENT=值
mysql> ALTER TABLE user15 AUTO_INCREMENT = 100;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table user15;
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table  | Create Table                                                                                                                                                                                                                                                                     |
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user15 | CREATE TABLE `user15` (
  `id` tinyint unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `card` char(18) NOT NULL,
  `test` varchar(20) NOT NULL,
  `test1` char(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=100 DEFAULT CHARSET=utf8 |
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show tables;
+-----------------+
| Tables_in_maizi |
+-----------------+
| cms_cate        |
| cms_news        |
| course          |
| test1           |
| test10          |
| test11          |
| test12          |
| test2           |
| test3           |
| test4           |
| test5           |
| test6           |
| test7           |
| test8           |
| test9           |
| user            |
| user1           |
| user10          |
| user11          |
| user12          |
| user13          |
| user14          |
| user15          |
| user2           |
| user3           |
| user4           |
| user5           |
| user6           |
| user7           |
| user8           |
| user9           |
+-----------------+
31 rows in set (0.00 sec)

删除数据表

  • DROP TABLE [IF EXISTS] tbl_name[, tbl_name…]
mysql> DROP TABLE user12;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+-----------------+
| Tables_in_maizi |
+-----------------+
| cms_cate        |
| cms_news        |
| course          |
| test1           |
| test10          |
| test11          |
| test12          |
| test2           |
| test3           |
| test4           |
| test5           |
| test6           |
| test7           |
| test8           |
| test9           |
| user            |
| user1           |
| user10          |
| user11          |
| user13          |
| user14          |
| user15          |
| user2           |
| user3           |
| user4           |
| user5           |
| user6           |
| user7           |
| user8           |
| user9           |
+-----------------+
30 rows in set (0.00 sec)

mysql> DROP TABLE user11,user10,user9;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+-----------------+
| Tables_in_maizi |
+-----------------+
| cms_cate        |
| cms_news        |
| course          |
| test1           |
| test10          |
| test11          |
| test12          |
| test2           |
| test3           |
| test4           |
| test5           |
| test6           |
| test7           |
| test8           |
| test9           |
| user            |
| user1           |
| user13          |
| user14          |
| user15          |
| user2           |
| user3           |
| user4           |
| user5           |
| user6           |
| user7           |
| user8           |
+-----------------+
27 rows in set (0.00 sec)

mysql> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值