SQL基本知识与常用代码
登录
mysql –h hostname -P port –u username –p password.
增加新用户
grant select, insert, update, delete
on books.*
to user identified by '1234'
database相关:
SHOW: 显示
SELECT: 检索
select用来检索数据, 检索时至少要指定两条信息:
SELECT 表1.列1, 表2. 列2 FROM 表1, 表2(多张表中选取)
SELECT * FROM 表名
SELECT DISTINCT 列2 FROM 表名 (去除重复)`
同时还可以指定一些过滤规则与排序规则, 这一般是通过子句实现的:
1.ORDER BY 列1, 列2 [DESC|ASC] : 必须在where子句后,在limit子句前.
2.LIMIT num : 用来指定最多返回多少条记录.必须在order by子句之后.
3.WHERE 子句: 指定过滤条件(尽量在数据库层面过滤数据,而不要在语言层面(如 php,python)过滤数据), 因为数据库过滤效率高, 而且也可以避免不必要的数据 在数据库服务端到数据库客户端的传输
INSERT(增)1:insert
DELETE(删) 2:delete
UPDATE(改) 3:update
更新数据表某一列或者多列( 特别要注意where子句 )
CREATE TABLE(建)4:create table
创建表,基本语法:
create table 表名
(
列名1 数据类型 [NULL | NOT NULL] [约束],
列名2 数据类型 [NULL | NOT NULL] [约束],
...
)
尽量指定NULL或者NOT NULL, 一般约束是可选的
MYSQL数据类型
1.字符串类型
类型 | 解释 |
---|---|
CHAR | 1~255个字符长度的定长字符串,长度必须创建时指定 |
ENUM | 枚举,值只能是预定义集合中的某一个 |
TEXT | 最长 64k 的变长字符串 |
VARCHAR | 长度可变,最长不超过255个字节 |
SET | 预定义集合中的0个或者多个串 |
//用的较多的就是: CHAR, VARCHAR, TEXT. 在sql语句中对于字符串值要用引号.
2.数值类型(如果确定为非负数,可以在类型前加 UNSIGNED)
类型 | 解释 |
---|---|
BIT | 位字段, 1~64位 |
BOOLEAN(或BOOL) | 布尔(0或者1) |
DECIMAL(或DEC) | 精度可变的浮点 |
DOUBLE | 双精度浮点 |
FLOAT | 单精度浮点 |
INT(或INTEGER) | 整数 |
// 用的较多的就是: INT, BOOLEAN, DOUBLE, FLOAT. 在sql中数值类型不要加引号.
3.时间日期类型
类型 | 解释 |
---|---|
TIME | 格式为: HH:MM:SS |
DATE | 日期,格式为: YYYY-MM-DD |
DATETIME | DATE和TIME的组合 |
TIMESTAMP | 功能和DATETIME相同,但范围较小 |
YEAR | 年份,2位数字则范围是: 1970~2069, 4为数字则范围:1901~2155 |
// 用的较多的是 DATETIME, DATE, TIME这三个类型.
4.二进制类型
类型 | 最大容量 |
---|---|
BLOB | 64KB |
MEDIUMBLOB | 16MB |
LONGBLOB | 4GB |
TINYBLOB | 255个字节 |
// 用的较多的就是: BLOB
约束
1.NOT NULL: 应该紧挨着类型的后面.
2.PRIMARY KEY:主键,不用再指定unique。
3.UNIQUE:字段必须唯一, 但是字段可以为NULL. 也就是说UNIQUE不会检查 NULL值.可 以指定多个字段,也就是说规定指定字段的4.组合必须唯一.
5.FOREIGN KEY:外键
6.CHECK:值范围,eg:check(Id>0).
7.DEFAULT: 默认值,default 'yangyu', MySQL不接受函数作为默认值.
8.AUTO_INCREMENT:通常对主键。
INDEX(索引)
我的建议:
1.LIKE 很慢, 所以一般情况下,最好使用 full text.
2.绝不要检索比需求多的数据, 所以不要使用 SELECT * 这样的语句.
3.如果where中有很多的 OR 条件, 那么使用 UNION将其分拆为多条 select 语句会看 到明显的性能改善.
4.在插入数据频繁的场景下, 应该删除外键, 在应用层面检查约束就可以了, 因为插入 频繁时,外键会明显降低性能.
继续阅读 用go语言开发mysql
评论