摘要
主要介绍数据库的相关的SQL语句和常见的CRUD的语法。
一、 MySQL 创建数据库
CREATE DATABASE 数据库名;
二、 MySQL 删除数据库
drop database <数据库名>;
三、MySQL 选择数据库
use Database(数据库名称);
四、MySQL 创建数据表
# runoob_tbl 表名称
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
五、MySQL 删除数据表
# runoob_tbl 表名称
Drop table runoob_tbl;
六、MySQL 插入数据
INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date) VALUES ("学习 java", "java教程", NOW());
INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date) VALUES ("学习 mysql", "mysql教程", NOW());
INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date) VALUES ("学习 go", "go教程", NOW());
七、MySQL 查询数据
select * from runoob_tbl;
SELECT runoob_title,submission_date from runoob_tbl rt ;
八、MySQL WHERE 子句
SELECT * from runoob_tbl WHERE runoob_author='mysql教程';
九、MySQL UPDATE 更新
UPDATE runoob_tbl SET runoob_title='庄小焱 学习go' WHERE runoob_id=3;
十、MySQL DELETE 语句
DELETE FROM runoob_tbl WHERE runoob_id=3;
十一、MySQL LIKE 子句
SELECT * from runoob_tbl WHERE runoob_author LIKE '%o%';
十二、MySQL UNION语句
SELECT country FROM Websites UNION SELECT country FROM apps ORDER BY country;
十三、MySQL Order by语句
SELECT * from runoob_tbl ORDER BY submission_date ASC;# 升序
SELECT * from runoob_tbl ORDER BY submission_date DESC;# 降序
十四、MySQL GROUP BY 语句
SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
十五、MySQL 正则表达式
# 查找name字段中以'st'为开头的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
# 查找name字段中以'ok'为结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
# 查找name字段中包含'mar'字符串的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
# 查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
十六、MySQL 事务
mysql> select * from runoob_transaction_test;
Empty set (0.01 sec)
mysql> begin; # 开始事务
Query OK, 0 rows affected (0.00 sec)
mysql> insert into runoob_transaction_test value(5);
Query OK, 1 rows affected (0.01 sec)
mysql> insert into runoob_transaction_test value(6);
Query OK, 1 rows affected (0.00 sec)
mysql> commit; # 提交事务
Query OK, 0 rows affected (0.01 sec)
--------------------------------------------------------------
mysql> begin; # 开始事务
Query OK, 0 rows affected (0.00 sec)
mysql> insert into runoob_transaction_test values(7);
Query OK, 1 rows affected (0.00 sec)
mysql> rollback; # 回滚
Query OK, 0 rows affected (0.00 sec)
十七、MySQL ALTER命令
# 使用了 ALTER 命令及 DROP 子句来删除以上创建表的 i 字段
mysql> ALTER TABLE testalter_tbl DROP i;
# MySQL 中使用 ADD 子句来向数据表中添加列,如下实例在表 testalter_tbl 中添加 i 字段,并定义数据类型:
mysql> ALTER TABLE testalter_tbl ADD i INT;
# 把字段 c 的类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);
# 实例将数据表 testalter_tbl 重命名为 alter_tbl:
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;
十八、MySQL 索引
# 创建索引
CREATE INDEX indexName ON table_name (column_name);
# 修改表结构(添加索引)
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;
# 创建唯一索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
# 修改表结构
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 testalter_tbl ADD INDEX (c);
ALTER TABLE testalter_tbl DROP INDEX c;
# 使用 ALTER 命令添加和删除主键
mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
# 显示索引信息
mysql> SHOW INDEX FROM table_name\G;
十九、MySQL 处理重复数据
# 统计重复数据
mysql> SELECT COUNT(*) as repetitions, last_name, first_name
-> FROM person_tbl
-> GROUP BY last_name, first_name
-> HAVING repetitions > 1;
# 过滤重复数据
mysql> SELECT DISTINCT last_name, first_name
-> FROM person_tbl;
# 可以使用 GROUP BY 来读取数据表中不重复的数据:
mysql> SELECT last_name, first_name
-> FROM person_tbl
-> GROUP BY (last_name, first_name);
# 删除重复数据
mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;
# 在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。方法如下:
mysql> ALTER IGNORE TABLE person_tbl
-> ADD PRIMARY KEY (last_name, first_name);
二十、MySQL 函数
# 返回 CustomerName 字段第一个字母的 ASCII 码:
SELECT ASCII(CustomerName) AS NumCodeOfFirstChar
FROM Customers;
# 返回字符串 RUNOOB 的字符数
SELECT CHAR_LENGTH("RUNOOB") AS LengthOfString;
# 返回字符串 RUNOOB 的字符数
SELECT CHARACTER_LENGTH("RUNOOB") AS LengthOfString;
# 合并多个字符串
SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook") AS ConcatenatedString;
# 合并多个字符串,并添加分隔符:
SELECT CONCAT_WS("-", "SQL", "Tutorial", "is", "fun!")AS ConcatenatedString;
# 返回字符串 c 在列表值中的位置:
SELECT FIELD("c", "a", "b", "c", "d", "e");
# 返回字符串 c 在指定字符串中的位置:
SELECT FIND_IN_SET("c", "a,b,c,d,e");
# 格式化数字 "#,###.##" 形式:
SELECT FORMAT(250500.5634, 2); -- 输出 250,500.56
# 从字符串第一个位置开始的 6 个字符替换为 runoob:
SELECT INSERT("google.com", 1, 6, "runoob"); -- 输出:runoob.com
# 获取 b 在字符串 abc 中的位置:
SELECT LOCATE('st','myteststring'); -- 5
# 返回字符串 abc 中 b 的位置:
SELECT LOCATE('b', 'abc') -- 2
# 字符串 RUNOOB 转换为小写:
SELECT LCASE('RUNOOB') -- runoob
# 返回字符串 runoob 中的前两个字符:
SELECT LEFT('runoob',2) -- ru
# 将字符串 xx 填充到 abc 字符串的开始处:
SELECT LPAD('abc',5,'xx') -- xxabc