一下mysql的语句正确的是_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

搜索某种模式

156905ed36a609357dbe1ce63641e782.png

文本值:

这是正确的: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'

可以把 AND 和 OR结合起来(使用圆括号来组成复杂的表达式):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 * FROMtest_auto_increment;+----+----------+

| id | username |

+----+----------+

| 1 | A |

| 2 | B |

| 3 | C |

| 4 | E |

| 5 | F |

| 15 | G |

+----+----------+

6 rows in set (0.00sec)

mysql> INSERT INTO test_auto_increment VALUES(20,'Twenty');

Query OK,1 row affected (0.01sec)

mysql> SELECT * FROMtest_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.01sec)

Rows matched:1 Changed: 1 Warnings: 0mysql> SELECT * FROMtest_auto_increment;+----+----------+

| id | username |

+----+----------+

| 1 | A |

| 2 | B |

| 3 | C |

| 4 | E |

| 5 | Five |

| 15 | G |

| 20 | Twenty |

+----+----------+

7 rows in set (0.00sec)mysql> UPDATE test_auto_increment SET id=100 WHERE id=15;

Query OK,1 row affected (0.01sec)

Rows matched:1 Changed: 1 Warnings: 0mysql> SELECT * FROMtest_auto_increment;+-----+----------+

| id | username |

+-----+----------+

| 1 | A |

| 2 | B |

| 3 | C |

| 4 | E |

| 5 | Five |

| 20 | Twenty |

| 100 | G |

+-----+----------+

7 rows in set (0.00sec)

mysql> UPDATE test_auto_increment SET username='Onehundred' WHERE id=100;

Query OK,1 row affected (0.01sec)

Rows matched:1 Changed: 1 Warnings: 0mysql> SELECT * FROMtest_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)

340b2d08ead96ed8deefa5e83b64ec53.png

c57e3c04c0e73413681dfe4fca399c8c.png

c73eeed0007d012a51de5464811e41be.png

0cb68a0a8a7a97c2401b2f4995c68e94.png

a60f1ae1a885b4a5819c33fe51c5a84d.png

DELETE 语句

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

DELETE FROM 表名称 WHERE 列名称 = 值  --(如果不添加WHERE条件, 表中所有记录都会被删除)

mysql> SELECT * FROMtest_auto_increment;+-----+------------+

| id | username |

+-----+------------+

| 1 | A |

| 2 | B |

| 3 | C |

| 4 | E |

| 5 | Five |

| 20 | Twenty |

| 100 | Onehundred |

+-----+------------+

7 rows in set (0.00sec)

mysql> DELETE FROM test_auto_increment WHERE id=20;

Query OK,1 row affected (0.01sec)

mysql> SELECT * FROMtest_auto_increment;+-----+------------+

| id | username |

+-----+------------+

| 1 | A |

| 2 | B |

| 3 | C |

| 4 | E |

| 5 | Five |

| 100 | Onehundred |

+-----+------------+

6 rows in set (0.00 sec)

删除所有行

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

DELETE FROMtable_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 EXISTSuser1(

`id`INT UNSIGNED AUTO_INCREMENT KEY)ENGINE=INNODB DEFAULT CHARSET=UTF8;--添加用户名字段 username VARCHAR(20)

ALTER TABLEuser1ADD username VARCHAR(20);--添加密码字段 password CAHR(32) NOT NULL

ALTER TABLEuser1ADD password CHAR(32) NOT NULL;--添加邮箱字段 email VARCHAR(50) NOT NULL UNIQUE 加到username之后

ALTER TABLEuser1ADD email VARCHAR(50) NOT NULL UNIQUE KEYAFTER username;--添加测试字段 test VARCHAR(10) NOT NULL DEFAULT 0 加到最前面

ALTER TABLEuser1ADD test VARCHAR(10) NOT NULL DEFAULT 0FIRST;--删除字段

ALTER TABLEuser1DROPtest;--添加age, addr字段, 删除email字段

ALTER TABLEuser1ADD age INT UNSIGNED NOT NULL DEFAULT 18,ADD addr VARCHAR(100) NOT NULL DEFAULT '北京',DROP IF EXISTSemail;-----------------------------------------------------------------------------

mysql> DESCuser1;+-------+------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+-------+------------------+------+-----+---------+----------------+

| id | int(10) unsigned | NO | PRI | NULL | auto_increment |

+-------+------------------+------+-----+---------+----------------+

1 row in set (0.01sec)

mysql> ALTER TABLEuser1-> ADD username VARCHAR(20);

Query OK,0 rows affected (0.04sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser1;+----------+------------------+------+-----+---------+----------------+

| 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.00sec)

mysql> ALTER TABLEuser1-> ADD password CHAR(32) NOT NULL;

Query OK,0 rows affected (0.01sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser1;+----------+------------------+------+-----+---------+----------------+

| 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.00sec)

mysql> ALTER TABLEuser1-> ADD email VARCHAR(50) NOT NULL UNIQUE KEYAFTER username;

Query OK,0 rows affected (0.04sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser1;+----------+------------------+------+-----+---------+----------------+

| 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.01sec)

mysql> ALTER TABLEuser1-> ADD test VARCHAR(10) NOT NULL DEFAULT 0FIRST;

Query OK,0 rows affected (0.02sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser1;+----------+------------------+------+-----+---------+----------------+

| 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.01sec)

mysql> ALTER TABLEuser1-> DROPtest;

Query OK,0 rows affected (0.02sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser1;+----------+------------------+------+-----+---------+----------------+

| 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.01sec)

mysql> ALTER TABLEuser1-> ADD age INT UNSIGNED NOT NULL DEFAULT 18,-> ADD addr VARCHAR(100) NOT NULL DEFAULT '北京',-> DROP IF EXISTSemail;

Query OK,0 rows affected (0.02sec)

Records:0 Duplicates: 0 Warnings: 0mysql> 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 EXISTSuser2(

idINT UNSIGNED AUTO_INCREMENT KEY,

usernameVARCHAR(20) NOT NULL,

ageTINYINT UNSIGNED NOT NULL DEFAULT 18,

emailVARCHAR(50) NOT NULL)ENGINE=INNODB DEFAULT CHARSET=UTF8;--给email字段添加默认值 Tencent@qq.com, 并且删除age字段的默认值

ALTER TABLEuser2ALTER email SET DEFAULT 'Tencent@qq.com',ALTER age DROP DEFAULT;-------------------------------------------------------------------------------------

mysql> CREATE TABLE IF NOT EXISTSuser2(-> 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.02sec)

mysql> DESCuser2;+----------+---------------------+------+-----+---------+----------------+

| 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.01sec)

mysql> ALTER TABLEuser2-> ALTER email SET DEFAULT 'Tencent@qq.com',-> ALTER age DROP DEFAULT;

Query OK,0 rows affected (0.00sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser2;+----------+---------------------+------+-----+----------------+----------------+

| 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.01sec)

mysql> SELECT * FROMuser2;

Emptyset (0.00 sec)

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

--测试修改字段类型和字段属性, 字段名称

CREATE TABLEuser3(

idINT UNSIGNED AUTO_INCREMENT KEY,

usernameVARCHAR(5)NOT NULL UNIQUE,

passwordCHAR(32) NOT NULL,

emailVARCHAR(10) NOT NULL)ENGINE=INNODB DEFAULT CHARSET=UTF8;--将用户名字段类型改为20

ALTER TABLEuser3

MODIFY usernameVARCHAR(20) NOT NULL UNIQUE;--将email字段改为VARCHAR(50) NOT NULL FIRST

ALTER TABLEuser3

MODIFY emailVARCHAR(50) NOT NULLFIRST;--将username名称改为user, password改为pwd

ALTER TABLEuser3

CHANGE usernameuser VARCHAR(20) NOT NULL,

CHANGE password pwdCHAR(40) NOT NULL UNIQUE KEY;------------------------------------------------------------------------------

mysql> CREATE TABLEuser3(-> 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.01sec)

mysql> DESCuser3;+----------+------------------+------+-----+---------+----------------+

| 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.01sec)

mysql> ALTER TABLEuser3-> MODIFY email VARCHAR(50) NOT NULLFIRST;

Query OK,0 rows affected (0.03sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser3;+----------+------------------+------+-----+---------+----------------+

| 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.01sec)

mysql> ALTER TABLEuser3-> CHANGE username user VARCHAR(20) NOT NULL,-> CHANGE password pwd CHAR(40) NOT NULL UNIQUE KEY;

Query OK,0 rows affected (0.03sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser3;+-------+------------------+------+-----+---------+----------------+

| 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 TABLEuser4(

idINTUNSIGNED,

usernameVARCHAR(20) NOT NULL)ENGINE=INNODB DEFAULT CHARSET=UTF8;--给id字段添加primary key

ALTER TABLEuser4ADD PRIMARY KEY(id);--删除主键

ALTER TABLEuser4DROP 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 TABLEuser5(

idINT UNSIGNED AUTO_INCREMENT KEY,

usernameVARCHAR(20) NOT NULL)ENGINE=INNODB DEFAULT CHARSET=UTF8;--此时还没有去除AUTO_INCREMENT属性

ALTER TABLEuser5DROP 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 TABLEuser5

MODIFY idINT UNSIGNED NOT NULL;--去除QUTO_INCREMENT属性后:

ALTER TABLEuser5DROP PRIMARY KEY;----------------------------------------------------------------------

mysql> CREATE TABLEuser5(-> id INT UNSIGNED AUTO_INCREMENT KEY,-> username VARCHAR(20) NOT NULL

-> )ENGINE=INNODB DEFAULT CHARSET=UTF8;

Query OK,0 rows affected (0.01sec)

mysql> DESCuser5;+----------+------------------+------+-----+---------+----------------+

| 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.01sec)

mysql> ALTER TABLEuser5-> DROP PRIMARY KEY;

ERROR1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a keymysql> ALTER TABLEuser5-> MODIFY id INT UNSIGNED NOT NULL;

Query OK,0 rows affected (0.03sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser5;+----------+------------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+----------+------------------+------+-----+---------+-------+

| id | int(10) unsigned | NO | PRI | NULL | |

| username | varchar(20) | NO | | NULL | |

+----------+------------------+------+-----+---------+-------+

2 rows in set (0.01sec)

mysql> ALTER TABLEuser5-> DROP PRIMARY KEY;

Query OK,0 rows affected (0.04sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser5;+----------+------------------+------+-----+---------+-------+

| 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 TABLEuser6(

idINT UNSIGNED AUTO_INCREMENT KEY,

usernameVARCHAR(100) NOT NULL UNIQUE,

passwordCHAR(32) NOT NULL,

emailVARCHAR(50) NOT NULL UNIQUE)ENGINE=INNODB DEFAULT CHARSET=UTF8;--MySQL中默认是唯一索引的名称和字段名称相同--删除唯一索引

ALTER TABLEuser6DROP INDEXusername;--添加唯一索引

ALTER TABLEuser6ADD UNIQUE KEY(username);--如果要指定唯一索引的名称(即不要"默认是唯一索引的名称和字段名称相同")

ALTER TABLEuser6ADD UNIQUE INDEXuni_email(email);--指定唯一索引的名称后, 如果要删除该索引, 就要使用指定后的索引名称

ALTER TABLEuser6DROP INDEXuni_email;------------------------------------------------------------------------------------

mysql> CREATE TABLEuser6(-> 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.02sec)

mysql> DESCuser6;+----------+------------------+------+-----+---------+----------------+

| 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.01sec)

mysql> ALTER TABLEuser6-> DROP INDEXusername;

Query OK,0 rows affected (0.01sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser6;+----------+------------------+------+-----+---------+----------------+

| 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.00sec)

mysql> ALTER TABLEuser6-> ADD UNIQUE KEY(username);

Query OK,0 rows affected (0.01sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser6;+----------+------------------+------+-----+---------+----------------+

| 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.01sec)

mysql> SHOW CREATE TABLEuser6;+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| user6 | CREATE TABLE`user6` (

`id`int(10) unsigned NOT NULLAUTO_INCREMENT,

`username`varchar(100) NOT NULL,

`password`char(32) NOT NULL,

`email`varchar(50) NOT NULL,PRIMARY KEY(`id`),UNIQUE KEY`email` (`email`),--------------------

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00sec)

mysql> ALTER TABLEuser6-> DROP INDEXemail;

Query OK,0 rows affected (0.01sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser6;+----------+------------------+------+-----+---------+----------------+

| 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.01sec)

mysql> ALTER TABLEuser6-> ADD UNIQUE INDEXuni_email(email);

Query OK,0 rows affected (0.02sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser6;+----------+------------------+------+-----+---------+----------------+

| 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.01sec)

mysql>mysql>mysql> SHOW CREATE TABLEuser6;+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| user6 | CREATE TABLE`user6` (

`id`int(10) unsigned NOT NULLAUTO_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`)------------

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00sec)

mysql> ALTER TABLEuser6-> DROP UNIQUE INDEXuni_email;

ERROR1064 (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 2mysql> ALTER TABLEuser6-> DROP INDEXuni_email;

Query OK,0 rows affected (0.01sec)

Records:0 Duplicates: 0 Warnings: 0mysql> DESCuser6;+----------+------------------+------+-----+---------+----------------+

| 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 TABLEtab_name

RENAME[TO|AS]new_tab_name;--或者:

RENAME TABLE tab_name TOnew_tab_name;--将user6改为user666

ALTER TABLEuser6

RENAMETOuser666;--------------------------------------------------------------------------------------------

mysql> ALTER TABLEuser6-> RENAME TOuser666;

Query OK,0 rows affected (0.01sec)

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.00sec)

mysql> RENAME TABLE user666 TOuser66;

Query OK,0 rows affected (0.01sec)

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)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值