返回顶部

SQL基础应用(一)

mysql内置的功能

连接数据库

  • -u 用户

  • -p 密码

  • -S socket本地连接

  • -h ip地址

  • -P 端口号

  • -e  非交互模式

例子

mysql -uroot -p -S /tmp/mysql.sock
mysql -uroot -p -h10.0.0.51 -P3306

-e 免交互执行sql语句

mysql -uroot -p123 -e "show databases;"

恢复数据

mysql -uroot -p <world.sql

内置命令

  • help 打印mysql帮助

  • \c ctrl+c 结束上个命令运行

  • \q quit; exit; ctrl+d 退出mysql

  • \G 将数据竖起来显示

  • source 恢复备份文件

SQL基础应用

SQL介绍

  • 结构化的查询语言

  • 关系型数据库通用的命令

  • 遵循SQL92的标准(SQL_MODE)

SQL常用种类

  • DDL 数据定义语言

  • DCL 数据控制语言

  • DML 数据操作语言

  • DQL 数据查询语言

SQL引入-数据库的逻辑结构

  • 库名字

  • 库属性:字符集,排序规则

  • 表名

  • 表属性:存储引擎类型,字符集,排序规则

  • 列名

  • 列属性:数据类型,约束,其他属性

  • 数据行

字符集 (charset) 

  • 相当于MySQL的密码本(编码表)
  • show charset;

  • utf8 : 3个字节

  • utf8mb4 (建议): 4个字节,支持emoji

排序规则: collation

  • mysql> show collation;

  • 对于英文字符串的,大小写的敏感

  • utf8mb4_general_ci 大小写不敏感

  • utf8mb4_bin 大小写敏感(存拼音,日文)

数据类型介绍

作用

  • 保证数据的准确性和标准性。

数值类型

tinyint : -128~127

int :-2^31~2^31-1

 字符类型

char(11) :
定长 的字符串类型,在存储字符串时,最大字符长度11个,立即分配11个字符长度的存储空间,如果存不满,空格填充。
varchar(11):
变长的字符串类型看,最大字符长度11个。在存储字符串时,自动判断字符长度,按需分配存储空间。
如何选择这两个数据类型?
1. 少于255个字符串长度,定长的列值,选择char
2. 多于255字符长度,变长的字符串,可以选择varchar
enum('bj','tj','sh'): 枚举类型,比较适合于将来此列的值是固定范围内的特点,可以使用enum,可以很大程度的优化我们的索引结构。   

 时间类型

datetime 
范围为从 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999。
timestamp
范围为从 1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999。 

二进制类型

DDL的应用(数据定义语言)

库的定义

创建数据库

CREATE DATABASE zabbix CHARSET utf8mb4 COLLATE  utf8mb4_bin;

查看库情况

SHOW DATABASES;
SHOW CREATE DATABASE zabbix;

删除数据库

DROP DATABASE oldguo;

修改数据库字符集

  • --- 注意: 一定是从小往大了改,比如utf8--->utf8mb4.

  • --- 目标字符集一定是源字符集的严格超级.

CREATE DATABASE oldguo;
SHOW CREATE DATABASE oldguo;
ALTER DATABASE oldguo CHARSET utf8mb4;

关于库定义规范

  • 库名使用小写字符

  • 库名不能以数字开头

  • 不能是数据库内部的关键字

  • 必须设置字符集.

表定义

--- 建表

  • 表名,列名,列属性,表属性

--- 列属性

  • PRIMARY KEY : 主键约束,表中只能有一个,非空且唯一.

  • NOT NULL : 非空约束,不允许空值

  • UNIQUE KEY : 唯一键约束,不允许重复值

  • DEFAULT : 一般配合 NOT NULL 一起使用.

  • UNSIGNED : 无符号,一般是配合数字列,非负数

  • COMMENT : 注释

  • AUTO_INCREMENT : 自增长的列

CREATE TABLE stu (
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '学号',
sname VARCHAR(255) NOT NULL  COMMENT '姓名',
age TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
gender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性别',
intime DATETIME NOT NULL DEFAULT NOW() COMMENT '入学时间'
)ENGINE INNODB CHARSET utf8mb4;

建表规范

  • 表名小写字母,不能数字开头,

  • 不能是保留字符,使用和业务有关的表名

  • 选择合适的数据类型及长度

  • 每个列设置 NOT NULL + DEFAULT .对于数据0填充,对于字符使用有效字符串填充

  • 没个列设置注释

  • 表必须设置存储引擎和字符集

  • 主键列尽量是无关列数字列,最好是自增长

  • enum类型不要保存数字,只能是字符串类型

查询建表信息

SHOW TABLES;
SHOW CREATE TABLE stu;
DESC stu;

创建一个表结构一样的表

CREATE TABLE test LIKE stu;

删表

DROP TABLE test;

修改

在stu表中添加qq列

DESC stu;
ALTER TABLE stu ADD qq VARCHAR(20) NOT NULL COMMENT 'qq号';

在sname后加微信列

ALTER TABLE stu ADD wechat VARCHAR(64) NOT NULL UNIQUE COMMENT '微信号' AFTER sname;

在id列前加一个新列num

ALTER TABLE stu ADD num INT NOT NULL UNIQUE COMMENT '身份证' FIRST ;
DESC  stu;

把刚才添加的列都删掉(危险,不代表生产操作)

ALTER TABLE stu DROP num;
DESC stu;
ALTER TABLE stu DROP qq;
ALTER TABLE stu DROP wechat;

修改sname数据类型的属性

DESC stu;
ALTER TABLE stu MODIFY sname VARCHAR(64) NOT NULL COMMENT '姓名';

将gender 改为 sex 数据类型改为 CHAR 类型

ALTER TABLE stu  CHANGE gender sex CHAR(4) NOT NULL COMMENT '性别';

insert 插入数据

最偷懒

INSERT stu VALUES(1,'zs',18,'m',NOW());
SELECT * FROM stu;

最规范

INSERT INTO stu(id,sname,age,sex,intime)
VALUES (2,'ls',19,'f',NOW());

针对性的录入数据

INSERT INTO stu(sname,age,sex)
VALUES ('w5',11,'m');

一次性录入多行

INSERT INTO stu(sname,age,sex)
VALUES 
('aa',11,'m'),
('bb',12,'f'),
('cc',13,'m');

update 更新数据(一定要加where条件)

UPDATE stu SET sname='aaa';
SELECT * FROM stu;
UPDATE stu SET sname='bb' WHERE id=6;

delete 删除数据(一定要有where条件)

DELETE FROM stu;
DELETE FROM stu WHERE id=9;

生产中屏蔽delete功能,使用update替代delete

ALTER TABLE stu ADD is_del TINYINT DEFAULT 0 ;
UPDATE stu SET is_del=1 WHERE id=7;
SELECT * FROM stu WHERE is_del=0;

  

  

  

 

posted @ 2020-02-24 22:44  Crazymagic  阅读(255)  评论(0编辑  收藏  举报