MySQL中常用语句1

SELECT USER()------得到登陆的用户

SELECT VERSION()------得到MySQL的版本信息

SELECT NOW()------得到当前的日期时间

SELECT DATABASE()------得到当前打开的数据库

1. 创建数据库

CREATE {DATABASE|SCHEMA} db_name;------检测数据库名称是否存在,不存在则创建
CREATE DATABASE [IF NOT EXISTS] db_name;------在创建数据库的同时指定编码方式
CREATE DATABASE [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset;

注意
数据库名称最好有意义
名称不要包含特殊字符或者是MySQL关键字
查看当前服务器下全部数据库------SHOW DATABASES|SCHEMAS;
查看指定数据库的详细信息------SHOW CREATE DATABASE db_name;
修改指定数据库的编码方式------ALTER DATABASE db_name [DEFAULT] CHARACTER SET [=] charset;
打开指定数据库------USE db_name;
得到当前打开的数据库------SELECT DATABASE()|SCHEMA();
删除指定的数据库------DROP DATABASE db_name;
如果数据库存在则删除------DROP DATABASE [IF EXISTS] db_name;

2. 创建表
CREATE TABLE [IF NOT EXISTS] tbl_name(
字段名称 字段类型 [完整性约束条件],
字段名称 字段类型 [完整性约束条件],
...
)ENGINE=存储引擎 CHARSET=编码方式;

 


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

 

查看当前数据库下已有数据表------SHOW TABLES;
             ------SHOW [FULL] TABLES [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]

 

查看指定数据表的详细信息------SHOW CREATE TABLE tbl_name;

 

查看表结构------DESC tbl_name;
        ------DESCRIBE tbl_name;
        ------SHOW COLUMNS FROM tbl_name;


删除指定的数据表------DROP TABLE [IF EXISTS] tbl_name;
3. 表结构相关操作

 

SELECT 相关操作:

SELECT 列名称 FROM 表名称

SELECT * FROM 表名称
星号(*)是选取所有列的快捷方式。

关键词 DISTINCT 用于返回唯一不同的值。
SELECT DISTINCT 列名称 FROM 表名称

 

SELECT select_expr,... FROM tbl_name
[WHERE 条件]
[GROUP BY {col_name|position} HAVING 二次筛选]
[ORDER BY {col_name|position|expr} [ASC|DESC]]
[LIMIT 限制结果集的显示条数] ; 

 

查询表中所有记录:
  SELECT * FROM tbl_name;
  *所有字段
指定字段的信息:
  SELECT 字段名称,... FROM tbl_name
库名.表名:
  SELECT 字段名称,... FROM db_name.tbl_name;
给字段起别名:
  SELECT 字段名称 [AS] 别名名称,... FROM db_name.tbl_name;
给数据表起别名:
  SELECT 字段名称 ,... FROM tbl_name [AS] 别名;
表名.字段名的:
  SELECT tbl_name.col_name,... FROM tbl_name;

 

② WHERE 子句用于规定选择的标准:

 

SELECT 列名 FROM  表名 WHERE 列 运算符 值

下面的运算符可在 WHERE 子句中使用:

操作符

描述
= 等于
<> / != 不等于

>

大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式

 

 

 

  

 

 

 

 

 

 

文本值:
这是正确的:
SELECT * FROM Persons WHERE FirstName='Bush'

这是错误的:
SELECT * FROM Persons WHERE FirstName=Bush
数值: 这是正确的:
SELECT * FROM Persons WHERE Year>1965 这是错误的: SELECT * FROM Persons WHERE Year>'1965'

AND 和 OR 运算符

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

AND 运算符实例
使用 AND 来显示所有姓为 "firstname" 并且名为 "lastname" 的人:

SELECT * FROM Persons WHERE FirstName='firstname' AND LastName='lastname'

使用 OR 来显示所有姓为 "firstname" 或者名为 "lastname" 的人:


SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
 
可以把 ANDOR 结合起来(使用圆括号来组成复杂的表达式):

SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'

 

ORDER BY 语句

ORDER BY 语句用于根据指定的列对结果集进行排序。

ORDER BY 语句默认按照升序对记录进行排序。

如果希望按照降序对记录进行排序,可以使用 DESC 关键字。

 

SELECT column1, column2 FROM Orders ORDER BY column2 --按照column2升序排序
SELECT Column1, Column2 FROM Orders ORDER BY Column2 DESC --按照Column2降序排序

 

INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行
语法
INSERT INTO 表名称 VALUES (值1, 值2,....)
我们也可以指定所要插入数据的列:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
INSERT table_name SET 字段名称=值, 字段名称=值, ...., 字段名称=值; --(example: INSERT user SET username='streamice', age=18, email='12345@163.com'; )

INSERT [INTO] table_name1(字段名称1, 字段名称2, ...) SELECT 字段名称1, 字段名称2, ... FROM table_name2 [WHERE条件]
--解释: 从table_name2中选出一些字段名称插入到table_name1中相应的字段中(example: INSERT user(username) SELECT username_temp FROM temp;
     --user和temp为表, username和username_temp为相应表中的其中一个字段)<两个字段的名字不一定要相同 >


一次插入多条记录:
INSERT [INTO] table_name(列1, 列2, ...) VALUES(值1, 值2, ...), (值1, 值2, ...), ....., (值1, 值2, ...);
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)

mysql> INSERT INTO test_auto_increment VALUES(20,'Twenty');
Query OK, 1 row affected (0.01 sec)

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

 

Update 语句

Update 语句用于修改表中的数据。

UPDATE 表名称 SET 列名称(1) = 新值 WHERE 列名称(2) = 旧值
UPDATE table_name SET 字段名1=值1, 字段名2=值2, ... WHERE 字段名=值; --若没有WHERE条件, 则整个表中的记录都会被更新

注: 列名称(1)是要UPDATE的值, 列名称(2)是原来的字段(column列)------------UPDATE 表名称 SET [要更新的部分] WHERE [旧部分]
[]mysql> UPDATE test_auto_increment SET username='Five' WHERE username='F';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

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

mysql> UPDATE test_auto_increment SET id=100 WHERE id=15;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM test_auto_increment;
+-----+----------+
| id  | username |
+-----+----------+
|   1 | A        |
|   2 | B        |
|   3 | C        |
|   4 | E        |
|   5 | Five     |
|  20 | Twenty   |
| 100 | G        |
+-----+----------+
7 rows in set (0.00 sec)

mysql> UPDATE test_auto_increment SET username='Onehundred' WHERE id=100;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM test_auto_increment;
+-----+------------+
| id  | username   |
+-----+------------+
|   1 | A          |
|   2 | B          |
|   3 | C          |
|   4 | E          |
|   5 | Five       |
|  20 | Twenty     |
| 100 | Onehundred |
+-----+------------+
7 rows in set (0.00 sec)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DELETE 语句

DELETE 语句用于删除表中的行。

DELETE FROM 表名称 WHERE 列名称 = 值  --(如果不添加WHERE条件, 表中所有记录都会被删除)
mysql> SELECT * FROM test_auto_increment;
+-----+------------+
| id  | username   |
+-----+------------+
|   1 | A          |
|   2 | B          |
|   3 | C          |
|   4 | E          |
|   5 | Five       |
|  20 | Twenty     |
| 100 | Onehundred |
+-----+------------+
7 rows in set (0.00 sec)

mysql> DELETE FROM test_auto_increment WHERE id=20;
Query OK, 1 row affected (0.01 sec)

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

 

删除所有行

可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:

DELETE FROM table_name
或者:
DELETE * FROM table_name

 

删除记录:
  DELETE FROM tbl_name [WHERE 条件]
  如果不添加条件,表中所有记录都会被删除
  DELETE 清空数据表的时候不会重置AUTO_INCREMENT的值,可以通过ALTER 语句将其重置为1 ALTER TABLE table_name AUTO_INCREMENT=1
彻底清空数据表:
  TRUNCATE [TABLE] tbl_name;
  清除表中所有记录
  会重置AUTO_INCREMENT的值

 

添加字段------ALTER TABLE tbl_name
    ------ADD 字段名称 字段属性 [完整性约束条件] [FIRST|AFTER 字段名称]


删除字段------ALTER TABLE tbl_name
    ------DROP 字段名称


添加默认值------ALTER TABLE tbl_name
     ------ALTER 字段名称 SET DEFAULT 默认值;


删除默认值------ALTER TABLE tbl_name

        ------ALTER 字段名称 DROP DEFAULT

修改字段类型、字段属性------ALTER TABLE tbl_name
           ------MODIFY 字段名称 字段类型 [字段属性] [FIRST | AFTER 字段名称]


修改字段名称、字段类型、字段属性------ALTER TABLE tbl_name
                     ------CHANGE 原字段名称 新字段名称 字段类型 字段属性 [FIRST | AFTER 字段名称]
添加主键------ALTER TABLE tbl_name
    ------ADD PRIMARY KEY(字段名称)


删除主键------ALTER TABLE tbl_name
    ------DROP PRIMARY KEY;


添加唯一------ALTER TABLE tbl_name
              ------ADD UNIQUE KEY|INDEX [index_name] (字段名称)


删除唯一------ALTER TABLE tbl_name
    ------DROP index_name;


修改数据表名称------ALTER TABLE tbl_name
       ------RENAME [TO|AS] new_tbl_name


RENAME TABLE tbl_name TO new_tbl_name;------修改AUTO_INCREMENT的值
                       ------ALTER TABLE tbl_name AUTO_INCREMENT=值

 

-----------------------------------------------------------------------------------

--测试添加和删除字段

CREATE TABLE IF NOT EXISTS user1(
    `id` INT UNSIGNED AUTO_INCREMENT KEY
)ENGINE=INNODB DEFAULT CHARSET=UTF8;

--添加用户名字段 username VARCHAR(20)
ALTER TABLE user1
ADD username VARCHAR(20);

--添加密码字段 password CAHR(32) NOT NULL
ALTER TABLE user1
ADD password CHAR(32) NOT NULL;

--添加邮箱字段 email VARCHAR(50) NOT NULL UNIQUE 加到username之后
ALTER TABLE user1
ADD email VARCHAR(50) NOT NULL UNIQUE KEY AFTER username;

--添加测试字段 test VARCHAR(10) NOT NULL DEFAULT 0 加到最前面
ALTER TABLE user1
ADD test VARCHAR(10) NOT NULL DEFAULT 0 FIRST;

--删除字段
ALTER TABLE user1
DROP test;

--添加age, addr字段, 删除email字段
ALTER TABLE user1
ADD age INT UNSIGNED NOT NULL DEFAULT 18,
ADD addr VARCHAR(100) NOT NULL DEFAULT '北京',
DROP IF EXISTS email;

-----------------------------------------------------------------------------

mysql> DESC user1;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
+-------+------------------+------+-----+---------+----------------+
1 row in set (0.01 sec)

mysql> ALTER TABLE user1
    -> ADD username VARCHAR(20);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user1;
+----------+------------------+------+-----+---------+----------------+
| 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.00 sec)

mysql> ALTER TABLE user1
    -> ADD password CHAR(32) NOT NULL;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

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

mysql> ALTER TABLE user1
    -> ADD email VARCHAR(50) NOT NULL UNIQUE KEY AFTER username;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user1;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | YES  |     | NULL    |                |
| email    | varchar(50)      | NO   | UNI | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

mysql> ALTER TABLE user1
    -> ADD test VARCHAR(10) NOT NULL DEFAULT 0 FIRST;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user1;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| test     | varchar(10)      | NO   |     | 0       |                |
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | YES  |     | NULL    |                |
| email    | varchar(50)      | NO   | UNI | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

mysql>  ALTER TABLE user1
    -> DROP test;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user1;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | YES  |     | NULL    |                |
| email    | varchar(50)      | NO   | UNI | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

mysql> ALTER TABLE user1
    -> ADD age INT UNSIGNED NOT NULL DEFAULT 18,
    -> ADD addr VARCHAR(100) NOT NULL DEFAULT '北京',
    -> DROP IF EXISTS email;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user1;                                        ,       ',
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | YES  |     | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
| age      | int(10) unsigned | NO   |     | 18      |                |
| addr     | varchar(100)     | NO   |     | 北京    |                |
+----------+------------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

 

对字段默认值得操作: 

 

--测试添加和删除默认值操作
CREATE TABLE IF NOT EXISTS user2(
    id INT UNSIGNED AUTO_INCREMENT KEY,
    username VARCHAR(20) NOT NULL ,
    age TINYINT UNSIGNED NOT NULL DEFAULT 18,
    email VARCHAR(50) NOT NULL
)ENGINE=INNODB DEFAULT CHARSET=UTF8;

--给email字段添加默认值 Tencent@qq.com, 并且删除age字段的默认值
ALTER TABLE user2
ALTER email SET DEFAULT 'Tencent@qq.com',
ALTER age DROP DEFAULT;




-------------------------------------------------------------------------------------


mysql> CREATE TABLE IF NOT EXISTS user2(
    -> id INT UNSIGNED AUTO_INCREMENT KEY,
    -> username VARCHAR(20) NOT NULL ,
    -> age TINYINT UNSIGNED NOT NULL DEFAULT 18,
    -> email VARCHAR(50) NOT NULL
    -> )ENGINE=INNODB DEFAULT CHARSET=UTF8;
Query OK, 0 rows affected (0.02 sec)

mysql> DESC user2;
+----------+---------------------+------+-----+---------+----------------+
| Field    | Type                | Null | Key | Default | Extra          |
+----------+---------------------+------+-----+---------+----------------+
| id       | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)         | NO   |     | NULL    |                |
| age      | tinyint(3) unsigned | NO   |     | 18      |                |
| email    | varchar(50)         | NO   |     | NULL    |                |
+----------+---------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

mysql> ALTER TABLE user2
    -> ALTER email SET DEFAULT 'Tencent@qq.com',
    -> ALTER age DROP DEFAULT;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user2;
+----------+---------------------+------+-----+----------------+----------------+
| Field    | Type                | Null | Key | Default        | Extra          |
+----------+---------------------+------+-----+----------------+----------------+
| id       | int(10) unsigned    | NO   | PRI | NULL           | auto_increment |
| username | varchar(20)         | NO   |     | NULL           |                |
| age      | tinyint(3) unsigned | NO   |     | NULL           |                |
| email    | varchar(50)         | NO   |     | Tencent@qq.com |                |
+----------+---------------------+------+-----+----------------+----------------+
4 rows in set (0.01 sec)

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

 

修改字段类型, 名称, 属性:

 

--测试修改字段类型和字段属性, 字段名称
CREATE TABLE user3(
    id INT UNSIGNED AUTO_INCREMENT KEY,
    username VARCHAR(5)NOT NULL UNIQUE,
    password CHAR(32) NOT NULL ,
    email VARCHAR(10) NOT NULL
)ENGINE=INNODB DEFAULT CHARSET=UTF8;

--将用户名字段类型改为20
ALTER TABLE user3
MODIFY username VARCHAR(20) NOT NULL UNIQUE;

--将email字段改为VARCHAR(50) NOT NULL FIRST
ALTER TABLE user3
MODIFY email VARCHAR(50) NOT NULL FIRST;

--将username名称改为user, password改为pwd
ALTER TABLE user3
CHANGE username user VARCHAR(20) NOT NULL,
CHANGE password pwd CHAR(40) NOT NULL UNIQUE KEY;

------------------------------------------------------------------------------

mysql> CREATE TABLE user3(
    -> id INT UNSIGNED AUTO_INCREMENT KEY,
    -> username VARCHAR(5)NOT NULL UNIQUE,
    -> password CHAR(32) NOT NULL ,
    -> email VARCHAR(10) NOT NULL
    -> )ENGINE=INNODB DEFAULT CHARSET=UTF8;
Query OK, 0 rows affected (0.01 sec)

mysql> DESC user3;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(5)       | NO   | UNI | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
| email    | varchar(10)      | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

mysql> ALTER TABLE user3
    -> MODIFY email VARCHAR(50) NOT NULL FIRST;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user3;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| email    | varchar(50)      | NO   |     | NULL    |                |
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(20)      | NO   | UNI | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

mysql> ALTER TABLE user3
    -> CHANGE username user VARCHAR(20) NOT NULL,
    -> CHANGE password pwd CHAR(40) NOT NULL UNIQUE KEY;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user3;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| email | varchar(50)      | NO   |     | NULL    |                |
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| user  | varchar(20)      | NO   | UNI | NULL    |                |
| pwd   | char(40)         | NO   | UNI | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

 

主键(PRIMARY KEY)操作: 

 

--测试添加和删除主键
CREATE TABLE user4(
    id INT UNSIGNED,
    username VARCHAR(20) NOT NULL 
)ENGINE=INNODB DEFAULT CHARSET=UTF8;

-- 给id字段添加primary key
ALTER TABLE user4
ADD PRIMARY KEY (id);

--删除主键
ALTER TABLE user4
DROP PRIMARY KEY;

--在去除有AUTO_INCREMENT 属性的 PRIMARY KEY 字段时, 要先去掉该字段的AUTO_INCREMENT属性
--不然会报错ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key.
CREATE TABLE user5(
    id INT UNSIGNED AUTO_INCREMENT KEY,
    username VARCHAR(20) NOT NULL
)ENGINE=INNODB DEFAULT CHARSET=UTF8;

--此时还没有去除AUTO_INCREMENT属性
ALTER TABLE user5
DROP PRIMARY KEY;
--ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

--将id的AUTO_INCREMENT属性去掉
ALTER TABLE user5
MODIFY id INT UNSIGNED NOT NULL;

--去除QUTO_INCREMENT属性后:
ALTER TABLE user5
DROP PRIMARY KEY;

----------------------------------------------------------------------

mysql> CREATE TABLE user5(
    -> id INT UNSIGNED AUTO_INCREMENT KEY,
    -> username VARCHAR(20) NOT NULL
    -> )ENGINE=INNODB DEFAULT CHARSET=UTF8;
Query OK, 0 rows affected (0.01 sec)

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

mysql> ALTER TABLE user5
    -> 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 user5
    -> MODIFY id INT UNSIGNED NOT NULL;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

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

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

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

 

唯一索引(UNIQUE KEY)操作:

 

--测试添加和删除唯一(UNIQUE KEY)
CREATE TABLE user6(
    id INT UNSIGNED AUTO_INCREMENT KEY,
    username VARCHAR(100) NOT NULL UNIQUE,
    password CHAR(32) NOT NULL,
    email VARCHAR(50) NOT NULL UNIQUE
)ENGINE=INNODB DEFAULT CHARSET=UTF8;


--MySQL中默认是唯一索引的名称和字段名称相同
--删除唯一索引
ALTER TABLE user6
DROP INDEX username;

--添加唯一索引
ALTER TABLE user6
ADD UNIQUE KEY(username);

--如果要指定唯一索引的名称(即不要"默认是唯一索引的名称和字段名称相同")
ALTER TABLE user6
ADD UNIQUE INDEX uni_email(email);

--指定唯一索引的名称后, 如果要删除该索引, 就要使用指定后的索引名称
ALTER TABLE user6
DROP INDEX uni_email;

------------------------------------------------------------------------------------

mysql> CREATE TABLE user6(
    -> id INT UNSIGNED AUTO_INCREMENT KEY,
    -> username VARCHAR(100) NOT NULL UNIQUE,
    -> password CHAR(32) NOT NULL,
    -> email VARCHAR(50) NOT NULL UNIQUE
    -> )ENGINE=INNODB DEFAULT CHARSET=UTF8;
Query OK, 0 rows affected (0.02 sec)

mysql> DESC user6;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(100)     | NO   | UNI | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
| email    | varchar(50)      | NO   | UNI | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

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

mysql> DESC user6;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(100)     | NO   |     | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
| email    | varchar(50)      | NO   | UNI | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

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

mysql> DESC user6;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(100)     | NO   | UNI | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
| email    | varchar(50)      | NO   | UNI | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

mysql> SHOW CREATE TABLE user6;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user6 | CREATE TABLE `user6` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  `password` char(32) NOT NULL,
  `email` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),--------------------<------------------MySQL中默认unique key 的值和字段名相同
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

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

mysql> DESC user6;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(100)     | NO   | UNI | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
| email    | varchar(50)      | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

mysql> ALTER TABLE user6
    -> ADD UNIQUE INDEX uni_email(email);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user6;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(100)     | NO   | UNI | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
| email    | varchar(50)      | NO   | UNI | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

mysql>
mysql>
mysql> SHOW CREATE TABLE user6;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                    |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user6 | CREATE TABLE `user6` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(100) NOT NULL,
  `password` char(32) NOT NULL,
  `email` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `uni_email` (`email`)------------<----------自定义unique key 的名字
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> ALTER TABLE user6
    -> DROP UNIQUE INDEX uni_email;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UNIQUE INDEX uni_email' at line 2
mysql> ALTER TABLE user6
    -> DROP INDEX uni_email;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC user6;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(100)     | NO   | UNI | NULL    |                |
| password | char(32)         | NO   |     | NULL    |                |
| email    | varchar(50)      | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

 

 

重命名(RENAME):

 

--修改数据表名称
ALTER TABLE tab_name
RENAME [TO|AS] new_tab_name;
--或者:
RENAME TABLE tab_name TO new_tab_name;

--将user6改为user666
ALTER TABLE user6
RENAME TO user666;

--------------------------------------------------------------------------------------------

mysql> ALTER TABLE user6
    -> RENAME TO user666;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW TABLES;
+---------------------+
| Tables_in_test      |
+---------------------+
| admin_role          |
| imooc_user          |
| product             |
| test_auto_increment |
| test_date           |
| test_date_and_time  |
| test_primary_key    |
| test_primary_key2   |
| test_primary_key3   |
| test_primary_key4   |
| test_set            |
| test_time           |
| test_timestamp      |
| user1               |
| user2               |
| user3               |
| user4               |
| user5               |
| user666             |
| wh_logrecord        |
+---------------------+
20 rows in set (0.00 sec)

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

mysql> SHOW TABLES;
+---------------------+
| Tables_in_test      |
+---------------------+
| admin_role          |
| imooc_user          |
| product             |
| test_auto_increment |
| test_date           |
| test_date_and_time  |
| test_primary_key    |
| test_primary_key2   |
| test_primary_key3   |
| test_primary_key4   |
| test_set            |
| test_time           |
| test_timestamp      |
| user1               |
| user2               |
| user3               |
| user4               |
| user5               |
| user66              |
| wh_logrecord        |
+---------------------+
20 rows in set (0.00 sec)

 

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