MySQL基础总结
MySQL 创建数据库
create DATABASE xxx;
MySQL 删除数据库
drop DATABASE xxx;
MySQL 选择数据库
use XXX;
MySQL 创建数据表
CREATE TABLE IF NOT EXISTS `user`(
`id` INT UNSIGNED AUTO_INCREMENT,
`username` VARCHAR(100) NOT NULL,
`password` VARCHAR(100) NOT NULL,
PRIMARY KEY(`id`)
)CHARSET=UTF8;
MySQL 删除数据表
DROP TABLE user;
MySQL 插入数据
INSERT INTO user
(id, username, password)
VALUES
(1, "admin", "admin");
MySQL 引号
MySQL里引用字符串常量时需要用一堆英文单引号 ' 或英文双引号 " 讲字符串常量括起来
数据库查询
SELECT * FROM user WHERE DATABASE()="practice" LIMIT 1 OFFSET 2;
SELECT * FROM user WHERE DATABASE()="practice" LIMIT 2, 1;
LIMIT
LIMIT X, Y中X表示跳过X个数据,读取Y个数据
LIMIT Y表示选取Y个数据
OFFSET
OFFSET X表示跳过X个数据
WHERE 字句
SELECT * FROM user WHERE username="hello" AND password <> "world";
UPDATE 更新
UPDATE user SET username="hello", password="world!" WHERE DATABASE()="practice" AND username="hello" AND password="world";
DELETE 语句
DELETE FROM user WHERE username="" AND password="";
DELETE、TRUNCATE和DROP的区别
DROP > TRUNCATE > DELETE
DELETE
- delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交才能生效
- delete可根据条件删除表中满足条件的数据,如果不指定where字句,那么删除表中所有记录
- delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变
TRUNCATE
- TRUNCATE是DDL,会隐式提交,所以不会回滚,不会触发触发器
- 会删除表中所有记录,并且重新设置高水线和所有的索引
- 对于外键约束引用的表,不能用truncate table,而应使用不带WHERE字句的DELETE语句
- 不能用于参与了索引视图的表
DROP
- DROP是DDL,会隐式提交,所以,不能回滚,不会触发触发器。
- drop语句删除表结构及所有数据,并将表所占用的空间全部释放。
- drop语句将删除表的结构所依赖的约束,触发器,索引,依赖于该表的存储过程/函数将保留,但是变为invalid状态
LIKE 语句
SELECT * FROM user WHERE password LIKE "%2%";
UNION 语句
SELECT country FROM apps WHERE id=1 UNION DISTINCT SELECT country FROM websites WHERE id=1;
MySQL 排序
SELECT * FROM user ORDER BY password ASC;
SELECT * FROM user ORDER BY password DESC;
MySQL 分组
SELECT name, COUNT(name) from employee_tbl GROUP BY name, signin;
Coalesce(a, b, c)
SELECT COALESCE(name, "总数") as "姓名", COUNT(signin) FROM employee_tbl GROUP BY name WITH ROLLUP;
MySQL 连接的使用
INNER JOIN
内连接,或等值连接。
获取两个表中字段匹配关系的记录。
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl AS a INNER JOIN tcount_tbl AS b ON a.runoob_author = b.runoob_author;
LEFT JOIN
左连接
获取左表所有记录,即使右表没有对应匹配的记录。
SELECT a.runoob_id, a.runoob_title, b.runoob_count, b.runoob_author FROM RUNOOB_TBL AS a LEFT JOIN tcount_tbl AS b ON a.runoob_author = b.runoob_author;
RIGHT JOIN
右连接
与左连接相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
SELECT a.runoob_id, a.runoob_title, b.runoob_author, b.runoob_count FROM runoob_tbl AS a RIGHT JOIN tcount_tbl AS b ON a.runoob_author = b.runoob_author;
MySQL NULL值处理
- IS NULL: 当列的值是NULL,此运算符返回true
- IS NOT NULL: 当列的值不是NULL,运算符返回true
- <=>: 当比较的两个值相等或者都为NULL时返回true
SELECT * FROM runoob_test_tbl WHERE runoob_count IS NOT NULL;
MySQL 正则表达式
存在的正则模式
| 模式 | 描述 |
|---|---|
| ^ | 开始位置,可多行匹配 |
| $ | 结束位置,可多行匹配 |
| . | 通配,除\n,若匹配\n则写为[.\n] |
| [...] | 字符集合 |
| [^...] | 未包含的字符集合 |
| p1|p2|p3 | 匹配p1或p2或p3 |
| * | 零次或多次 |
| + | 一次或多次 |
| 确定的n次 | |
| 匹配最少n次,最多m次 |
SELECT * FROM RUNOOB_TEST_TBL WHERE runoob_author REGEXP ".*[o|O].*";
Mysql 事务
pass
Mysql ALTER命令
增加或者删除指定列
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl ADD i INT PRIMARY KEY AFTER c;
修改字段类型及名称
ALTER TABLE testalter_tbl MODIFY c VARCHAR(100);
ALTER TABLE testalter_tbl CHANGE c c VARCHAR(50);
修改字段默认值
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
ALTER TABLE testalter_tbl ALTER I DROP DEFAULT;
修改数据表名字
ALTER TABLE cao RENAME TO testalter_tbl;
MySQL 索引
CREATE INDEX indexName ON table_name(column_name)
ALTER table tableName ADD INDEX indexName(columnName)
DROP INDEX indexname ON mytabel;
MySQL 临时表
CREATE TEMPORY TABLE IF NOT EXISTS......
MySQL 复制表及内容
复制表
SHOW CREATE TABLE runoob_tbl;
复制内容
第一种方法:
INSERT INTO clone_tbl(runoob_id, runoob_title, runoob_author, submission_date) SELECT runoob_id, runoob_title, runoob_author, submission_date FROM runoob_tbl;
第二种方法:
CREATE TABLE clone_tbl LIKE runoob_tbl;
INSERT INTO clone_tbl SELECT * FROM runoob_tbl;
MySQL 导出数据
SELECT * FROM runoob_tbl INTO OUTFILE "/tmp/runoob.txt";
其他
略

浙公网安备 33010602011771号