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 基本知识

mysql 学习笔记1 基础_第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 定点型,更精确
定点型,是将整数部分和小数部分用分别用数字来存储的,所以定点型更精确,看如下的例子

mysql 学习笔记1 基础_第2张图片
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库操作 增删改查

mysql 学习笔记1 基础_第3张图片
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表操作

mysql 学习笔记1 基础_第4张图片
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;
mysql 学习笔记1 基础_第5张图片
show columns

或者用describe table语法


mysql 学习笔记1 基础_第6张图片
desc table
2.2.4 改表名

实例(rename)

rename table goods2 to shangpin;
mysql 学习笔记1 基础_第7张图片
shangpin

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

mysql 学习笔记1 基础_第8张图片
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;

mysql 学习笔记1 基础_第9张图片
add

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


3 DML操作(行操作)

mysql 学习笔记1 基础_第10张图片
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 高级操作

导入导出

我的笔记目录

你可能感兴趣的:(mysql 学习笔记1 基础)