标签搜索

MYSQL学习笔记

Toanle
2021-06-26 / 0 评论 / 225 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年06月27日,已超过1333天没有更新,若内容或图片失效,请留言反馈。

SQL基本知识与常用代码

  1. SQL 不区分大小写 ,但是惯例是SQL的关键字要大写, 所有的列名,表名,数据库名都 用小写
  2. 每一条SQL语句后加分号;
  3. SQL不区分空格,所以为了可读性,可以把Sql语句分成多行.

登录
mysql –h hostname -P port –u username –p password.
增加新用户

  • grant 权限 on 数据库.* to 用户名称@登陆主机 identified 密码
grant select, insert, update, delete
on books.*
to user identified by '1234'

database相关:

  • create database 数据库名; (创建数据库)
  • show databases; (显示所有数据库)
  • use dbname; (改变当前数据库)

SHOW: 显示

  • SHOW DATABASES;(显示当前用户账号的数据库)
  • SHOW TABLES; (显示当前数据库里数据表)
  • SHOW COLUMNS FROM tbname; (显示数据表tbname的结构)
  • DESCRIBE tbname; (等价于 show columns from tbname;)
  • SHOW STATUS; (显示数据库的基本信息)
  • SHOW GRANTS [username]; (显示当前用户或username的权限)
  • SHOW CREATE DATABASE dbname; (显示创建数据库dbname的sql语句)
  • SHOW CREATE DATABASE tbname; (显示创建数据表tbname的sql语句)

SELECT: 检索
select用来检索数据, 检索时至少要指定两条信息:

  1. 从哪里检索(database name)
  2. 你要检索什么(field name)
    `SELECT 列1,列2 FROM 表名

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

  1. 插入一条记录,省略列名:
  • INSERT INTO 表名 VALUES(val1, val2 ...)
  1. 插入一条记录:
  • INSERT INTO 表名 (列1,列2 ...) VALUES (val1, val2 ...)
  1. 插入多条记录:
  • INSERT INTO 表名 (列1,列2 ...) VALUES (val1, val2 ...), (val1, val2 ...)

DELETE(删) 2:delete

  1. DELETE from 表名称 where 列名称=值
  2. DELETE from 表名称 (删除所有行,但是保留表)
  3. DELETE * from 表名称 (删除所有行,但是保留表)
  4. truncate table 表名 (删除所有行,效率更高)

UPDATE(改) 3:update
更新数据表某一列或者多列( 特别要注意where子句 )

  • UPDATE 表名 SET 列名=新值 WHERE 列名=某值

CREATE TABLE(建)4:create table
创建表,基本语法:

create  table  表名
(
列名1   数据类型 [NULL | NOT NULL] [约束],
列名2   数据类型 [NULL | NOT NULL] [约束],
...
)

尽量指定NULL或者NOT NULL, 一般约束是可选的

MYSQL数据类型

1.字符串类型

类型解释
CHAR1~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
DATETIMEDATE和TIME的组合
TIMESTAMP功能和DATETIME相同,但范围较小
YEAR年份,2位数字则范围是: 1970~2069, 4为数字则范围:1901~2155

// 用的较多的是 DATETIME, DATE, TIME这三个类型.
4.二进制类型

类型最大容量
BLOB64KB
MEDIUMBLOB16MB
LONGBLOB4GB
TINYBLOB255个字节

// 用的较多的就是: 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(索引)

  • 删除表 : drop table 表名
  • 删除数据库: drop database 数据库名

我的建议:
1.LIKE 很慢, 所以一般情况下,最好使用 full text.
2.绝不要检索比需求多的数据, 所以不要使用 SELECT * 这样的语句.
3.如果where中有很多的 OR 条件, 那么使用 UNION将其分拆为多条 select 语句会看 到明显的性能改善.
4.在插入数据频繁的场景下, 应该删除外键, 在应用层面检查约束就可以了, 因为插入 频繁时,外键会明显降低性能.

继续阅读 用go语言开发mysql

1

评论

博主关闭了当前页面的评论