mysql 学习笔记1 基础

参考
MySQL 5.5 Reference Manual
MySQL 教程 | 菜鸟教程


知识点大纲

  • 1 基本知识
    • 1.1概念
    • 1.2安装与连接
    • 1.3客户端
    • 1.4数据类型
  • 2 DDL
    • 2.1库操作
    • 2.2表操作
    • 2.3列操作
  • 3 DML
    • 增删改
  • 4 DCL
    • 权限
  • 5 高级(优化等等)

1 基本知识

1.png

1.1概念

1.2安装与连接

1.3客户端

1.4数据类型

因为mysql主要业务就是处理数据,所以他对数据处理更加细致,数据的分类上就很细,大致分为三类:

  • 数值型
  • 字符串型
  • 时间日期型
    数值型又细分为整型 浮点型和定点型,下面细说

数据类型>数值型>整型

|类型名|取值范围(有符号或无符号)|占用存储(字节)|范围对应感觉|
|-|-|-|
|TINYINT| -128~127 或0~2^8-1 | 1|比如存年龄|
|SMALLINT |-32768~32767或0~2^16-1 |2|正负3万,一般商品ID够了|
|MEDIUMINT |-223~223-1或0~2^24-1 |3|正负八百万|
|INT| -231~231-1或0~2^32-1 |4|正负20亿|
|BIGINT |-263~263-1或0~2^64-1 |8|正负十万万亿...|
一个字节byte=8位bit
有没有符号用unsigned来表明,
整型还有zerofill和M属性
M的意思是表明数字最长有几位,配合zerofill用会将不足的位数用0填充,如果不写zerofill,其实M起不到任何作用,没有意义
此此外,写了zerofill那就是自动unsigned的。

数据类型>数值型>定点与浮点

|类型名 |占用存储(字节)|范围|
|-|-|
|FLOAT(M,D)| 4|正负3.4E+38|
|DOUBLE(M,D)| 8|范围更大,不必去记忆了|
|DECIMAL(M, D) |M+2 (ver >3.23)||
M表示小数点前后总位数,D表示小数点后面位数,而且不同于int的M值在zerofill时才有用,浮点数的M和D是真的有用,就是这个范围了
为什么float和int都是4字节,范围不一样呢
float/double , 有精度损失
decimal 定点型,更精确
定点型,是将整数部分和小数部分用分别用数字来存储的,所以定点型更精确,看如下的例子

folat和decimal.png

在为列选择了使用某种数值类型时,除了要考虑数据的类型外,还应该注意所要表示的值的范围和存储需求,只需选择能覆盖要取值的范围的最小类型即可。

数据类型>字符串型

类型名 备注
CHAR(M) 定长字符串,M<255字符,M表示字符数,不够M的会用空格填充
VARCHAR(M) 变长字符串,M<(65535转换成对应的字符数)
TEXT(M) M<2^16-1=65535字符 与varchar相反,很大的文本,慢,能用varchar就用varchar
ENUM('value1','value2',...) 枚举:列只能赋值为某个枚举成员或NULL
SET('value1','value2',...) 集合:列可以赋值为多个(最多64个)集合成员或NULL
BLOB BLOB(2^16-1)音频图像等
TINYBLOB BLOB(2^8-1)
MEDIUMBLOB BLOB(2^24-1)
LONGBLOB BLOB(2^32-1)
TINYTEXT TEXT(2^8-1)
MEDIUMTEXT TEXT(2^24-1)
LONGTEXT TEXT(2^32-1)

表格中,BLOB是一个能保存可变数量的数据的二进制的大对象。在某种意义上,串实际是一种非常“通用”类型,因为可用它们来表示任意值,不仅仅是字符串。例如,可用串类型来存储二进制数据,如图像、视频或音频。

char和varchard的选择?
字数少于20的话 直接用char,速度快
char和varchar的区别很有意思,有时单独开一篇

数据类型>日期和时间列类型

|类型名 |范围|含义|
|-|-|
|DATE|1000-01-01
到9999-12-31|日期, 'YYYY-MM-DD'
年份写两位的话0-69是用用20补全,70-99是用19补全|
|TIME|-838:59:59
到838:59:59|时间, 'HH:MM:SS'|
|DATETIME||时间和时间组合, 'YYYY-MM-DD HH:MM:SS|
|TIMESTAMP||时间戳,是1970-01-01到当前的秒数
timestamp不填的话会自动插入和更新|
所有时间日期类型数据要加引号插入

举例,生成一个日期和时间表,并插入2个元素:

CREATE TABLE my_test
(
    id INT,
    ts TIMESTAMP
)
INSERT my_test VALUES(1,20010101000000)
INSERT my_test(id) VALUES(2);
 
SELECT * from my_test
 
+------+----------------+
|  id  |     ts         |
+------+----------------+
|  1   | 20010101000000 |
|  2   | 20010113165713 |
+------+----------------+

转意序列列表

符号 含义
\0 ASCII 0(NUL)字符
\r 回车
\b 退格
' 单引号
% 百分号
\n 换行
\t 定位符
反斜杠
" 双引号
_ 下划线

2 DDL操作


2.1库操作 增删改查

2.png

|序号|操作 |语法|备注|
|-|-|-|
|1|创建库| create database dbname;|数据库名字可用是数字,字母,下划线和美元符号组成,不能用数字开头。建议都小写。|
|2|查看库所有库| show databases;||
|3|选库| use dbname;||
|4|删除库|drop databse dbname;| 谨慎操作!|
|5|查看当前库 | mysql> SELECT database();||
|6|查看当前状态 | mysql> status;||
|7|改root密码| mysql> SET PASSWORD FOR 'root'@'localhost' = 'newpass';|-|


2.2表操作

3.png
2.2.1创建表

全面语法

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

create_definition:
    col_name column_definition
  | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
      [index_option] ...
  | {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
      [index_name] [index_type] (index_col_name,...)
      [index_option] ...
  | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
      [index_option] ...
  | [CONSTRAINT [symbol]] FOREIGN KEY
      [index_name] (index_col_name,...) reference_definition
  | CHECK (expr)

column_definition:
    data_type [NOT NULL | NULL] [DEFAULT default_value]
      [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
      [COMMENT 'string']
      [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
      [STORAGE {DISK|MEMORY|DEFAULT}]
      [reference_definition]
重要参数 说明
type 字段类型 就是列类型,参见数据类型
not null 如果不写,默认插入null,如果声明了not null,那就不允许空着,或者设置default
default 设定默认值
auoto_increment 设定自动编号,每个表只能有一个自增列,并且必须被索引
primary key 设定主键,主键是不能重复的

实例

mysql> create table goods2 (
    -> goods_id int(10) not null auto_increment primary key,
  ->goods_num int(10) not null default 0);
Query OK, 0 rows affected (0.02 sec)

注意列名一律小写,因为null查询不方便所以所有列都要声明not null

2.2.2删除表

drop table tbl_name;

2.2.3查看表

查看本数据库的所有表
show tables;
查看某一个表的列
语法SHOW COLUMNS Syntax

SHOW [FULL] {COLUMNS | FIELDS} {FROM | IN} tbl_name [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]

实例

show columns from shop.goods2;
show columns

或者用describe table语法


desc table
2.2.4 改表名

实例(rename)

rename table goods2 to shangpin;
shangpin

2.3 列操作 修改列ALTER TABLE Syntax(添加 删除 修改列)

4.png

全面语法

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
    [alter_specification [, alter_specification] ...]
    [partition_options]

alter_specification:
    table_options
  | ADD [COLUMN] col_name column_definition
        [FIRST | AFTER col_name ]
  | ADD [COLUMN] (col_name column_definition,...)
  | ADD {INDEX|KEY} [index_name]
        [index_type] (index_col_name,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]] PRIMARY KEY
        [index_type] (index_col_name,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]]
        UNIQUE [INDEX|KEY] [index_name]
        [index_type] (index_col_name,...) [index_option] ...
  | ADD FULLTEXT [INDEX|KEY] [index_name]
        (index_col_name,...) [index_option] ...
  | ADD SPATIAL [INDEX|KEY] [index_name]
        (index_col_name,...) [index_option] ...
  | ADD [CONSTRAINT [symbol]]
        FOREIGN KEY [index_name] (index_col_name,...)
        reference_definition
  | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
  | CHANGE [COLUMN] old_col_name new_col_name column_definition
        [FIRST|AFTER col_name]
  | MODIFY [COLUMN] col_name column_definition
        [FIRST | AFTER col_name]
  | DROP [COLUMN] col_name
  | DROP PRIMARY KEY
  | DROP {INDEX|KEY} index_name
  | DROP FOREIGN KEY fk_symbol
  | DISABLE KEYS
  | ENABLE KEYS
  | RENAME [TO|AS] new_tbl_name
  | ORDER BY col_name [, col_name] ...
  | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
  | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
  | DISCARD TABLESPACE
  | IMPORT TABLESPACE
  | FORCE
  | ADD PARTITION (partition_definition)
  | DROP PARTITION partition_names
  | TRUNCATE PARTITION {partition_names | ALL}
  | COALESCE PARTITION number
  | REORGANIZE PARTITION [partition_names INTO (partition_definitions)]
  | ANALYZE PARTITION {partition_names | ALL}
  | CHECK PARTITION {partition_names | ALL}
  | OPTIMIZE PARTITION {partition_names | ALL}
  | REBUILD PARTITION {partition_names | ALL}
  | REPAIR PARTITION {partition_names | ALL}
  | PARTITION BY partitioning_expression
  | REMOVE PARTITIONING

实例(add)

 alter table goods2 add imag1 varchar(100) not null;

add

深入学习 MySQL 5.5 Reference Manual/SQL Statement Syntax/Data Definition Statements/


3 DML操作(行操作)

5.png

3.1增加数据insert

Insert
语法

insert into  tbl_name
(col_name,…)  values (value1,…)  //指定列
insertinto *tbl_name
 (value1,…)                        //所有列
insert into  tbl_name
*(value1,…),(value1,…),**(value1,…)      //一次加入多行

注意:数字不用加单引号,字符串必须加单引号

3.2 删除delete

delete from  tbl_name (col_name,…)  where expr

3.3 更改 update

update tbl_name  set col_name = value where expr

3.3 查找数据select


select * from tbl_name   
select * from tbl_name  where expr
高级版
 SELECT selection_list // 选择哪些列
 FROM table_list // 从何处选择行
 WHERE primary_constraint // 行必须满足什么条件
 GROUP BY grouping_columns // 怎样对结果分组
 HAVING secondary_constraint // 行必须满足的第二条件
 ORDER BY sorting_columns // 怎样对结果排序
 LIMIT count // 结果限定

Tips: 所有使用的关键词必须精确地以上面的顺序给出。例如,一个 HAVING 子句必须跟在 GROUP BY 子句之后和 ORDER BY 子句之前。
where→group by →having→order by→ limit

实例:

mysql> SELECT * FROM pet;                                 // 普通查询
mysql> SELECT * FROM pet WHERE name = "Bowser";           // 查询特定行
mysql> SELECT name, birth FROM pet where owner="Gwen";    // 查询特定列
mysql> SELECT death-birth FROM pet WHERE name="Bowser";   // 表达式计算
mysql> SELECT * FROM pet WHERE species = "dog" AND sex = "f"; // 条件查询
mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m") // 多重条件
    -> OR (species = "dog" AND sex = "f");
mysql> SELECT name, birth FROM pet ORDER BY birth DESC;   // 排序输出
mysql>SELECT * FROM pet GROUP BY species;                 // 分组输出
mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;    // 分组统计

4 DCL操作

5 高级操作

导入导出

我的笔记目录

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容