mysql的管理
#Window 启动mysqlcd c:/mysql/binmysqld --console#window 关闭mysqlcd c:/mysql/binmysqladmin -uroot shutdown#Linuxps -ef | grep mysqld #查看是否正在运行#Linux启动 mysqlroot@host# cd /usr/bin./mysqld_safe &#Linux 关闭mysqlroot@host# cd /usr/bin./mysqladmin -u root -p shutdownEnter password: ******
#用户设置root@host# mysql -u root -pEnter password:*******mysql> use mysql;Database changedmysql> INSERT INTO user(host, user, password,select_priv, insert_priv, update_priv)VALUES ('localhost', 'guest',PASSWORD('guest123'), 'Y', 'Y', 'Y');Query OK, 1 row affected (0.20 sec)mysql> FLUSH PRIVILEGES;Query OK, 1 row affected (0.01 sec)mysql> SELECT host, user, password FROM user WHERE user = 'guest';+-----------+---------+------------------+| host | user | password |+-----------+---------+------------------+| localhost | guest | 6f8c114b58f2ce9e |+-----------+---------+------------------+1 row in set (0.00 sec)在添加用户时,请注意使用MySQL提供的 PASSWORD() 函数来对密码进行加密。你可以在以上实例看到用户密码加密后为: 6f8c114b58f2ce9e.注意:在 MySQL5.7 中 user 表的 password 已换成了authentication_string。注意:password() 加密函数已经在 8.0.11 中移除了,可以使用 MD5() 函数代替。注意:在注意需要执行 FLUSH PRIVILEGES 语句。 这个命令执行后会重新载入授权表。如果你不使用该命令,你就无法使用新创建的用户来连接mysql服务器,除非你重启mysql服务器。你可以在创建用户时,为用户指定权限,在对应的权限列中,在插入语句中设置为 'Y' 即可,用户权限列表如下:Select_privInsert_privUpdate_privDelete_privCreate_privDrop_privReload_privShutdown_privProcess_privFile_privGrant_privReferences_privIndex_privAlter_priv另外一种添加用户的方法为通过SQL的 GRANT 命令,以下命令会给指定数据库TUTORIALS添加用户 zara ,密码为 zara123 。root@host# mysql -u root -pEnter password:*******mysql> use mysql;Database changedmysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP-> ON TUTORIALS.*-> TO 'zara'@'localhost'-> IDENTIFIED BY 'zara123';以上命令会在mysql数据库中的user表创建一条用户信息记录。注意: MySQL 的SQL语句以分号 (;) 作为结束标识。
/etc/my.cnf 文件配置一般情况下,你不需要修改该配置文件,该文件默认配置如下:[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sock[mysql.server]user=mysqlbasedir=/var/lib[safe_mysqld]err-log=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid在配置文件中,你可以指定不同的错误日志文件存放的目录,一般你不需要改动这些配置。
mysql -h 127.0.0.1 -P 3306 -u 账号 -p密码
show databases;
use 数据库名;
选择数据库
创建用户
mysql 8.x
create user ‘test1’@’localhost’ identified by ‘‘密码’;
flush privileges; # 刷新权限
grant all privileges on . to ‘test1’@’localhost’ with grant option; # 授权
flush privileges;
mysql -h 127.0.0.1 -P 3306 -u 账号 -p密码show databases; // 显示所有的数据库use lijunyang; // 进入数据库
show tables;
desc table_name;
show create table table_name;
show columns from 数据表;
show index from 数据表;
show tab status like [from db_name] [like ‘pattern’] \G;
mysql> SHOW TABLE STATUS FROM RUNOOB; # 显示数据库 RUNOOB 中所有表的信息mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'; # 表名以runoob开头的表的信息mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'\G; # 加上 \G,查询结果按列打印
创建数据库
create DATABASE 数据库名;
mysql -h 127.0.0.1 -P 3306 -u 账号 -p密码create DATABASE RUNOOB;
删除数据库
drop database 数据库名;
mysql -h 127.0.0.1 -P 3306 -u 账号 -p密码drop DATABASE RUNOOB;
创建表

创建表语法:CREATE TABLE table_name (column_name column_type);IF NOT EXISTS 判断表是否存在AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。ENGINE 设置存储引擎,CHARSET 设置编码。INT UNSIGNED 无符号int0CREATE TABLE IF NOT EXISTS `user` (`userId` int(18) UNSIGNED NOT NULL AUTO_INCREMENT,`userName` varchar(255) NOT NULL,`password` varchar(255) NOT NULL,`Telephone` varchar(255) DEFAULT NULL,`email` varchar(255) DEFAULT '',`createTime` datetime NOT NULL,`updatePasswordTime` datetime NOT NULL,PRIMARY KEY (`userId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `historyPass` (`userId` int(18) NOT NULL,`updatePasswordTime` datetime NOT NULL,`password` varchar(255) NOT NULL,PRIMARY KEY (`userId`),CONSTRAINT `FK_ID` FOREIGN KEY (`userId`) REFERENCES `user` (`userId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
删除表
drop table table_name; 删除表
MySQL常用命令
查询自增值,photos为数据库名,tableName为表名
SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_schema=’photos’ and table_name=”tableName”;
修改自增键初始值
alter table table_name auto_increment=n;
注意n只能大于已有的auto_increment的整数值,小于的值无效.
新增数据
INSERT INTO user (userName,password,Telephone,email,createTime,updatePasswordTime) VALUES (‘账号’,’密码’,’1891605’,’@163.com’,’2018-06-24 22:28:00’,’2018-06-24 22:28:00’)
select * from goods_list;
select * from goods_list limit 0,10; // 分页查询,第1页,10条
select * from goods_list g, fileSavePath f where g.pathId = f.fileId; // 多表联合查询
select from runoob_tbl where runoob_author like ‘%COM’; // LIKE与%号配合使用,查找COM的内容的数据
select * from tablename order by field1, [field2…] [ASC | [DESC]]; // order by 字段名 升序 | 降序_
UNION 连接 两个select
_MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会默认删除重复的数据。
SELECT expression1, expression2, ... expression_nFROM tables[WHERE conditions]UNION [ALL | DISTINCT] // ALL 会删除重复,DISTINCT 不会删除重复SELECT expression1, expression2, ... expression_nFROM tables[WHERE conditions];
GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
SELECT column_name, function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_name;mysql> set names utf8;mysql> SELECT * FROM employee_tbl;+----+--------+---------------------+--------+| id | name | date | singin |+----+--------+---------------------+--------+| 1 | 小明 | 2016-04-22 15:25:33 | 1 || 2 | 小王 | 2016-04-20 15:25:47 | 3 || 3 | 小丽 | 2016-04-19 15:26:02 | 2 || 4 | 小王 | 2016-04-07 15:26:14 | 4 || 5 | 小明 | 2016-04-11 15:26:40 | 4 || 6 | 小明 | 2016-04-04 15:26:54 | 2 |+----+--------+---------------------+--------+6 rows in set (0.00 sec)mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;+--------+----------+| name | COUNT(*) |+--------+----------+| 小丽 | 1 || 小明 | 3 || 小王 | 2 |+--------+----------+3 rows in set (0.01 sec)使用 WITH ROLLUPWITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。例如我们将以上的数据表按名字进行分组,再统计每个人登录的次数:mysql> SELECT name, SUM(singin) as singin_count FROMemployee_tbl GROUP BY name WITH ROLLUP;+--------+--------------+| name | singin_count |+--------+--------------+| 小丽 | 2 || 小明 | 7 || 小王 | 7 || NULL | 16 |+--------+--------------+4 rows in set (0.00 sec)其中记录 NULL 表示所有人的登录次数。我们可以使用 coalesce 来设置一个可以取代 NUll 的名称,coalesce 语法:select coalesce(a,b,c);参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null,则返回为null(没意义)。以下实例中如果名字为空我们使用总数代替:mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM employee_tblGROUP BY name WITH ROLLUP;+--------------------------+--------------+| coalesce(name, '总数') | singin_count |+--------------------------+--------------+| 小丽 | 2 || 小明 | 7 || 小王 | 7 || 总数 | 16 |+--------------------------+--------------+4 rows in set (0.01 sec)
DELETE FROM table_name [WHERE Clause]
UPDATE tablename SET variablename = value [where variablename = value]
select * from goods_list g limit 0,1 #分页返回select * from goods_list order by goodsId DESC limit 0,3; #升序select * from goods_list order by goodsId ASC limit 0,3; #降序
## 修改表结构## ALTER TABLE 表名 MODIFY 列名 数据类型ALTER TABLE user MODIFY userId int(18) UNSIGNED NOT NULL;## ALTER TABLE 表名 CHANGE 原列名 新列名 数据类型 ## 修改表结构,可以重命名字段名ALTER TABLE user CHANGE userId UserId int(18) UNSIGNED NOT NULL;## ALTER TABLE 表名 DROP 列名 ## 删除一个字段## ALTER TABLE 表名 ADD 列名 数据类型 ## 新增一个字段## 设置字段默认值,方法一,就不会有NULL了ALTER TABLE testalter_tbl MODIFY j BIGINT NOT NULL DEFAULT 100;## 设置字段默认值,方法二mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;mysql> SHOW COLUMNS FROM testalter_tbl;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| c | char(1) | YES | | NULL | || i | int(11) | YES | | 1000 | |+-------+---------+------+-----+---------+-------+2 rows in set (0.00 sec)## 删除掉defaultmysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;mysql> SHOW COLUMNS FROM testalter_tbl;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| c | char(1) | YES | | NULL | || i | int(11) | YES | | NULL | |+-------+---------+------+-----+---------+-------+2 rows in set (0.00 sec)### 创建表CREATE TABLE `historyPass` (`userId` int(18) UNSIGNED NOT NULL,`updatePasswordTime` datetime NOT NULL,`password` varchar(255) NOT NULL,PRIMARY KEY (`userId`),CONSTRAINT `FK_ID` FOREIGN KEY (`userId`) REFERENCES `user` (`userId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8## 查询用此表字段做外键的表信息selectTABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAMEfrom INFORMATION_SCHEMA.KEY_COLUMN_USAGEwhere CONSTRAINT_SCHEMA ='lijunyang' ANDREFERENCED_TABLE_NAME = 'user';## 添加外键SET FOREIGN_KEY_CHECKS=0;alter table class_list add constraint `FK_TEACHERID` foreign key(`t_id`)references teacher_list(`t_id`);SET FOREIGN_KEY_CHECKS=1;## 删除外键 FK_ID是外键名,tableName是表名alter table tableName drop foreign key FK_ID;## 修改表类型mysql> ALTER TABLE testalter_tbl ENGINE = MYISAM;mysql> SHOW TABLE STATUS LIKE 'testalter_tbl'\G*************************** 1. row ****************Name: testalter_tblType: MyISAMRow_format: FixedRows: 0Avg_row_length: 0Data_length: 0Max_data_length: 25769803775Index_length: 1024Data_free: 0Auto_increment: NULLCreate_time: 2007-06-03 08:04:36Update_time: 2007-06-03 08:04:36Check_time: NULLCreate_options:Comment:1 row in set (0.00 sec)###修改表名mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;## 索引
Mysql 连接查询
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。 ``` mysql> use RUNOOB; Database changed mysql> SELECT * FROM tcount_tbl; +———————-+———————+ | runoob_author | runoob_count | +———————-+———————+ | 菜鸟教程 | 10 | | RUNOOB.COM | 20 | | Google | 22 | +———————-+———————+ 3 rows in set (0.01 sec)
mysql> SELECT * from runoob_tbl; +—————-+———————-+———————-+————————-+ | runoob_id | runoob_title | runoob_author | submission_date | +—————-+———————-+———————-+————————-+ | 1 | 学习 PHP | 菜鸟教程 | 2017-04-12 | | 2 | 学习 MySQL | 菜鸟教程 | 2017-04-12 | | 3 | 学习 Java | RUNOOB.COM | 2015-05-01 | | 4 | 学习 Python | RUNOOB.COM | 2016-03-06 | | 5 | 学习 C | FK | 2017-04-05 | +—————-+———————-+———————-+————————-+ 5 rows in set (0.01 sec)
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+——————-+————————-+————————+ | a.runoob_id | a.runoob_author | b.runoob_count | +——————-+————————-+————————+ | 1 | 菜鸟教程 | 10 | | 2 | 菜鸟教程 | 10 | | 3 | RUNOOB.COM | 20 | | 4 | RUNOOB.COM | 20 | +——————-+————————-+————————+ 4 rows in set (0.00 sec)
以上 SQL 语句等价于: mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author; +——————-+————————-+————————+ | a.runoob_id | a.runoob_author | b.runoob_count | +——————-+————————-+————————+ | 1 | 菜鸟教程 | 10 | | 2 | 菜鸟教程 | 10 | | 3 | RUNOOB.COM | 20 | | 4 | RUNOOB.COM | 20 | +——————-+————————-+————————+ 4 rows in set (0.01 sec)
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author; +——————-+————————-+————————+ | a.runoob_id | a.runoob_author | b.runoob_count | +——————-+————————-+————————+ | 1 | 菜鸟教程 | 10 | | 2 | 菜鸟教程 | 10 | | 3 | RUNOOB.COM | 20 | | 4 | RUNOOB.COM | 20 | | 5 | FK | NULL | +——————-+————————-+————————+ 5 rows in set (0.01 sec)
mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author; +——————-+————————-+————————+ | a.runoob_id | a.runoob_author | b.runoob_count | +——————-+————————-+————————+ | 1 | 菜鸟教程 | 10 | | 2 | 菜鸟教程 | 10 | | 3 | RUNOOB.COM | 20 | | 4 | RUNOOB.COM | 20 | | NULL | NULL | 22 | +——————-+————————-+————————+ 5 rows in set (0.01 sec)
<a name="rWj7o"></a>## Mysql NULL值得处理
mysql> create table runoob_test_tbl -> ( -> runoob_author varchar(40) NOT NULL, -> runoob_count INT -> ); Query OK, 0 rows affected (0.05 sec) mysql> INSERT INTO runoob_test_tbl (runoob_author, runoob_count) values (‘RUNOOB’, 20); mysql> INSERT INTO runoob_test_tbl (runoob_author, runoob_count) values (‘菜鸟教程’, NULL); mysql> INSERT INTO runoob_test_tbl (runoob_author, runoob_count) values (‘Google’, NULL); mysql> INSERT INTO runoob_test_tbl (runoob_author, runoob_count) values (‘FK’, 20);
mysql> SELECT * from runoob_test_tbl; +———————-+———————+ | runoob_author | runoob_count | +———————-+———————+ | RUNOOB | 20 | | 菜鸟教程 | NULL | | Google | NULL | | FK | 20 | +———————-+———————+ 4 rows in set (0.01 sec)
以下实例中你可以看到 = 和 != 运算符是不起作用的:
mysql> SELECT FROM runoob_test_tbl WHERE runoob_count = NULL; Empty set (0.00 sec) mysql> SELECT FROM runoob_test_tbl WHERE runoob_count != NULL; Empty set (0.01 sec)
查找数据表中 runoob_test_tbl 列是否为 NULL,必须使用 IS NULL 和 IS NOT NULL,如下实例:
mysql> SELECT FROM runoob_test_tbl WHERE runoob_count IS NULL; mysql> SELECT from runoob_test_tbl WHERE runoob_count IS NOT NULL;
<a name="SHc3U"></a>## select 去重查询
select distinct type from i18n_config
The solution is: [ RowDataPacket { type: ‘ar’ }, RowDataPacket { type: ‘de’ }, RowDataPacket { type: ‘en’ }, RowDataPacket { type: ‘es’ }, RowDataPacket { type: ‘fr’ }, RowDataPacket { type: ‘it’ }, RowDataPacket { type: ‘pt’ }, RowDataPacket { type: ‘th’ }, RowDataPacket { type: ‘vi’ } ]
<a name="C6MPo"></a>## MySQL 正则表达式| 模式 | 描述 || --- | --- || ^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\\n' 或 '\\r' 之后的位置。 || $ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\\n' 或 '\\r' 之前的位置。 || . | 匹配除 "\\n" 之外的任何单个字符。要匹配包括 '\\n' 在内的任何字符,请使用象 '[.\\n]' 的模式。 || [...] | 字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。 || [^...] | 负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。 || p1|p2|p3 | 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。 || * | 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。 || + | 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。 || {n} | n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。 || {n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |<a name="RvDdF"></a>### 实例了解以上的正则需求后,我们就可以根据自己的需求来编写带有正则表达式的SQL语句。以下我们将列出几个小实例(表名:person_tbl )来加深我们的理解:<br />查找name字段中以'st'为开头的所有数据:
以st开头 mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘^st’; 以ok结束 mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘ok$’; 包含mar mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘mar’; 以元音字母开头或ok结尾 mysql> SELECT name FROM person_tbl WHERE name REGEXP ‘^[aeiou]|ok$’;
<a name="rlHBg"></a>## 创建索引索引就相当于图书馆的分类卡片,可以增加查找的速度,但是会降低insert, update, delete操作的时间,索引必须在where的子语句里。<a name="t238z"></a>### 查看与删除唯一索引```javascriptshow index from table_name;DROP INDEX [唯一索引名称] ON "表名";
创建唯一索引
## 创建索引CREATE INDEX indexName ON mytable(username(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。## 修改表,添加索引ALTER table tableName ADD INDEX indexName(columnName)## 创建表时,添加索引CREATE TABLE mytable(ID INT NOT NULL,username VARCHAR(16) NOT NULL,INDEX [indexName] (username(length)));## 删除索引DROP INDEX [indexName] ON mytable;###唯一索引### 它与前面的普通索引类似,不同的就是:索引列的值必须唯一,### 但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:## 创建唯一索引## unique_md5_index 是索引名称 ,i18n_config是表名,unique_md5是字段名create unique index unique_md5_index on i18n_config (unique_md5);## 修改唯一索引ALTER table mytable ADD UNIQUE [indexName] (username(length))## 创建表时,创建唯一索引CREATE TABLE mytable(ID INT NOT NULL,username VARCHAR(16) NOT NULL,UNIQUE [indexName] (username(length)));###使用ALTER 命令添加和删除索引##有四种方式来添加数据表的索引:ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。ALTER TABLE tbl_name ADD UNIQUE index_name (column_list):这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。ALTER TABLE tbl_name ADD INDEX index_name (column_list):添加普通索引,索引值可出现多次。ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。mysql> ALTER TABLE testalter_tbl ADD INDEX (c);mysql> ALTER TABLE testalter_tbl DROP INDEX c;## 显示索引信息mysql> SHOW INDEX FROM table_name; \G........
使用ALTER命令添加字段,删除字段与修改字段
ALTER TABLE table_name ADD column_name datatype comment ‘描述’;
ALTER TABLE table_name ADD column_name datatype comment '描述';// 注意 :某些数据库系统不允许这种在数据库表中删除列的方式 (DROP COLUMN column_name)。ALTER TABLE table_name DROP COLUMN column_name;ALTER TABLE table_name modify COLUMN column_name datatype;
使用 ALTER 命令添加和删除主键
mysql> ALTER TABLE table_name MODIFY column_name INT NOT NULL;mysql> ALTER TABLE table_name ADD PRIMARY KEY (column_name);mysql> ALTER TABLE table_name DROP PRIMARY KEY;
查询表存在不存在
show index from table_name;
求表total合计
select count(id) from tableName;select count(DISTINCT id) from tableName;select id, count(*) as count from tableName group by id having count > 1; // 查重
bigInt 超长问题
把超长的字段转换成string
select CONVERT(spu_id, CHAR), xxx_table.* from xxx_table
insert,存在则更新,不存在则新增
SQL中的ON DUPLICATE KEY UPDATE使用详解
注意:想要使用该语法,必须利用“唯一索引”或者“主键索引”,只有产生“索引冲突”,该语法才能正常生效。
CREATE TABLE `testMfc` (`id` int(11) NOT NULL AUTO_INCREMENT,`age` int(11) DEFAULT NULL,`name` varchar(20) DEFAULT NULL,`num` int(11) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `uk_01` (`age`,`name`)) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4注意:想要使用该语法,必须利用“唯一索引”或者“主键索引”,只有产生“索引冲突”,该语法才能正常生效。此处建立唯一索引:age列和name列INSERT INTO t1 (a,b,c) VALUES (1,2,3)ON DUPLICATE KEY UPDATE c=c+1;UPDATE t1 SET c=c+1 WHERE a=1;INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6)ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
(1)使用ALTER TABLE语句创建索性
应用于表创建完毕之后再添加。
ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名)//普通索引alter table table_name add index index_name (column_list) ;//唯一索引alter table table_name add unique (column_list) ;//主键索引alter table table_name add primary key (column_list) ;删除索引可以使用ALTER TABLE或DROP INDEX语句来实现。DROP INDEX可以在ALTER TABLE内部作为一条语句处理,其格式如下:drop index index_name on table_name ;alter table table_name drop index index_name ;alter table table_name drop primary key ;
select where 大小写问题
# 默认情况下,where 是不区分大小写的select * from tableName where binary name = "Fans"
