1、法则
- 关系型数据库必须以行为单位进行读写
- 一个单元格只能输入一个数据
- 学会标准的SQL就可以在各种RDBMS中书写SQL语句了
2、SQL书写规则
- SQL要以
;
结尾,关键字大写,表名的首字母大写,其余(列名等)小写 - 关键字不区分大小写(插入到表中的数据是区分大小写的)
- 使用单引号标识字符串和日期常数;数字常熟不需要加注单引号
- 单词之间要使用半角空格或者换行进行分隔
- 数据库名称、表名和列表等可以使用以下三种字符:半角英文字母、半角数字、下划线
_
;名称必须以半角英文字母作为开头;名称不能重复。 - 删除了的表不能恢复,执行DROP TABLE语句之前务必仔细检查
- 表定义变更后无法恢复,执行ALTER TABLE语句之前务必仔细检查
3、权限管理
MySQL 的账户信息保存在 mysql 这个数据库中。
USE mysql;
SELECT user FROM user;
创建账户
新创建的账户没有任何权限。
CREATE USER myuser IDENTIFIED BY 'mypassword';
修改账户名
RENAME myuser TO newuser;
删除账户
DROP USER myuser;
查看权限
SHOW GRANTS FOR myuser;
授予权限
账户用 username@host 的形式定义,username@% 使用的是默认主机名。
GRANT SELECT, INSERT ON mydatabase.* TO myuser;
删除权限
GRANT 和 REVOKE 可在几个层次上控制访问权限:
- 整个服务器,使用 GRANT ALL 和 REVOKE ALL;
- 整个数据库,使用 ON database.*;
- 特定的表,使用 ON database.table;
- 特定的列;
- 特定的存储过程。
REVOKE SELECT, INSERT ON mydatabase.* FROM myuser;
更改密码
必须使用 Password() 函数
SET PASSWROD FOR myuser = Password('new_password');
4、SQL常用命令
修改MySQL提示符:
mysql -uroot -proot --prompt 提示符 # 连接客户端时通过参数指定
prompt 提示符 # 连接客户端之后,通过prompt指定
参数 | 描述 |
---|---|
\D | 完整的日期 |
\d | 当前数据库 |
\h | 服务器名称 |
\u | 当前用户 |
-
显示当前服务器版本:
SELECT VERSION();
-
显示当前日期:
SELECT NOW();
-
显示当前用户:
SELECT USER();
-
数据库创建与使用:
CREATE DATABASE test; USE test;
-
创建数据库
CREATE {DATEBASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name
- 查看当前服务器下的数据表列表
SHOW {DATABASE | SCHEMAS} [LIKE "pattern" | WHERE expr]
- 查看警告信息
SHOW WARNINGS;
- 查看数据库创建信息
SHOW CREATE DATABASE t1;
- 修改数据库
ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name
- 删除数据库
DROP {DATABASE |SCHEMA} [IF EXISTS] db_name;
- 注释
SELECT *
FROM mytable; -- 注释
/* 注释1
注释2 */
5、表的创建、修改和插入
创建表
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT,
col1 INT NOT NULL DEFAULT 1,
col2 VARCHAR(45) NULL,
col3 DATE NULL,+
PRIMARY KEY (`id`)); --设定主键
修改表
添加列
ALTER TABLE mytable
ADD col CHAR(20);
删除列
ALTER TABLE mytable
DROP COLUMN col;
删除表
DROP TABLE mytable;
修改表名
ALTER TABLE <原表名> to <新表名>
插入表数据
普通插入,不指定列则要求全部要插入
START TRANSACTION;
INSERT INTO mytable(col1, col2)
VALUES(val1, val2);
...
COMMIT;