DataWhale SQL TASK1
作者:互联网
目录摘要:选学了MySQL Workbench进行SQL连接。在创建表格的时候采用的是小括号,使用VARCHAR或者CHAR的时候,后面跟的也是小括号,不要跟C语言搞混了。name在MySQL中颜色不对,不建议使用,不过结果好像没问题。插入列是ALTER TABLE,插入数据是INSERT INTO,INSERT INTO 是VALUES ,复数,删除表格的命令是DROP TABLE。
第0章 环境搭建
1.MySQL环境搭建
-
如何安装MySQL,http://datawhale.club/t/topic/478
-
如何连接MySQL,菜单->控制面板->管理工具->服务中查找开启或者关闭MySQL服务
- 找不到控制面板,在搜索框搜索
- 控制面板,点击以大图标形式显示
- 开启以后,MySQL server以后台服务的形式在电脑上运行,如果想要进行查询,需要使用命令行工具或者应用程序
2.连接MySQL并执行SQL查询
2.1命令行方式(知道即可,不采用此种方式)
-
是最基本的方式,点击下方工具
-
红框处是版本号
-
缺点:查找与数据导出不方便,语句修改与调试也不方便、
2.2 MySQL workbench
- 连接数据库
- CTRL+U 或者 点击选项卡:Database—> Connect to Database
- 养成好习惯,表名用小写字母。MySQL服务器对大小写敏感,而Windows对大小写不敏感,有点乱,表名用小写字母。
第1章 初识数据库
1.1 初识数据库
-
名词解释
- 数据库(Database,DB)
- 数据库管理系统(Database Management System,DBMS)
-
DBMS的种类,DBMS主要通过数据的保存格式(数据库的种类)进行分类,主要有5种类型:
-
层次数据库(Hierarchical Database,HDB)
-
关系数据库(Relational Database,RDB)
- Oracle Database:甲骨文公司的RDBMS
- SQL Server:微软公司的RDBMS
- DB2:IBM公司的RDBMS
- PostgreSQL:开源的RDBMS
- MySQL:开源的RDBMS
- 注:以上是具有代表性的RDBMS,其特点是由行和列组成的 二维表来管理数据,这种类型的DBMS称为关系数据库管理系统。
-
面向对象数据库(Object Oriented Database,OODB)
-
XML数据库(XML Database,XMLDB)
-
键值存储系统(Key-Value Store,KVS),举例,MongoDB
-
-
本次学习的是关系型数据库RDBMS,RDBMS的常见系统结构是客户端/服务器类型(C/S类型)
1.2 初识SQL
-
在数据库中,行称为记录,列称为字段,行列交汇的地方称为单元格
-
SQL语句可以分为以下3类(实际操作中90%属于DML)
- DDL(Data Definition Language)数据定义语言,用来创建,修改,删除
- CREATE:创建数据库和表等对象
- DROP:删除数据库和表等对象
- ALTER:修改数据库和表等对象
- DML(Data Manipulation Language)数据操控语言,查询,修改,删除
- SELECT:查询数据
- INSERT:插入数据
- UPDATE:更新数据
- DELETE:删除数据
- DCL(Data Control Language)数据控制语言,用来确认或者取消对于数据库中的数据进行的变更。还可以对用户权限进行设定。
- COMMIT:确认变更
- ROLLBACK:取消变更
- GRANT:赋予用户操作权限
- REVOKE:取消用户操作权限
- DDL(Data Definition Language)数据定义语言,用来创建,修改,删除
-
SQL的基本书写规则
- 以分号(;)结尾,跟C语言类似
- SQL不区分关键字的大小写,但是插入到表中的数据是区分大小写的
- win不区分大小写,Linux和mac系统区分大小写
- 常数的书写方式是固定的
- “abc”
- “1234”
- “2010-01-26”,日期采用短横线连接
- “10/01/26"
- "26 Jan 2010"
- 单词需要用半角空格或者换行来分隔
- 不能使用全角空格来分隔
-
建立数据库
-
数据库的建立
-
CREATE DATABASE shop;
-
-
表的建立,注释采用“#”、$/**/$、--空格
CREATE TABLE product /*表开头不用分号*/ ( product_id CHAR(4) NOT NULL, #列名1 数据类型 约束, product_name VARCHAR(100) NOT NULL, /*列名2 数据类型 约束,*/ PRIMARY KEY(product_id) /*表的约束1,表的约束2,表的约束3); PRIMARY KEY表示主键约束,该列数值唯一*/ ); /*表格结束后圆括号后要有分号*/
-
-
命名规则
数字,字母,下划线作为数据库 表和列的名称;只能是字母开头
-
数据类型
- INTEGER,整数型
- CHAR,定长字符串,没达到最大的时候,会采用半角空格进行补足,由于会浪费存储空间,所以一般不用
- VARCHAR,存储可变长度字符串,即使达不到长度,也不会使用半角空格填补
- DATE,日期型
-
约束的设置
- NOT NULL,非空约束,必须填入数值
- PRIMARY KEY,主键约束,代表该列是唯一值,可以用来定位数据
-
表的删除和更新(ALTER与DROP操作不可恢复)
-
删除表的语法(无法恢复)
- DROP TABLE 表名,DROP TABLE product;
- 删除的表无法恢复,只能重新插入
-
添加列的语句
- ALTER TABLE 表名 ADD COLUMN 列定义
- ALTER TABLE product ADD COLUMN product_name_pinyin VARCHAR(100);
-
删除列的语句(无法恢复)
- ALTER TABLE 表名 DROP COLUMN 列名;
- ALTER TABLE product DROP COLUMN product_name_pinyin ;
-
删除表中特定行
-
DELETE FROM product WHERE COLUNMN_NAME="XXX"; -- 一定要有WHERE,否则整张表都删除了
-
-
-
清空表内容与更新
-
清空表格
- TRUNCATE TABLE TABLE_NAME;
- TRUNCATE比DELETE、DROP更快
- TRUNCATE TABLE TABLE_NAME;
-
更新
-
UPDATE table_name SET column_name1=表达式1, column_name2=表达式2; -- 这个分号只有没有WHERE的情况下是加的,有WHERE没分号 WHERE 条件; --可选参数非常重要,如果没有就是对所有进行更新 ORDER BY子句; --可选 LIMIT 子句; --可选 -- UPDATE 一定要配合WHERE,否则就是操作所有的语句 -- 修改所有的注册时间 UPDATE product SET regist_date="2020-10-10"; UPDATE product SET regist_date="2020-10-10" WHERE product_type="厨房用具"; -- 有where 的情况下,在where后面加分号即可,不要在SET后面加分号,分号是句尾 -- 合并后的写法 UPDATE product -- SET 可以同时写两列(都不带分号,分号在WHERE后面写) SET sale_price = sale_price * 10, purchase_price = purchase_price / 2 WHERE product_type = '厨房用具';
-
NULL清空
-
UPDATE product -- 只可以清空没有约束为NOT NULL的,以及主键的约束列 SET register_date=NULL WHERE product_id="008";
-
-
-
-
插入数据
-
INSERT INTO TBALE_NAME (COLUMN1 COLUMN2) VALUES (VALUE1,VALUE2)
-
如果插入一行的话,可以省略列名,不可用省略表名,是VALUES,复数
-
INSERT INTO 是插入数据的,插入一列是ALTER TABLE table_name ADD COLUMN 类型 限制;
-
执行一次INSERT会插入一条语句,很多支持一次插入多行
-
INSERT INTO product VALUES (1,2,3) (4,5,6) -- ORACLE INSERT ALL INTO productins VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11') INTO productins VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL) INTO productins VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20')
-
INSERT INTO也可以插入NULL
-
-
创建列的时候,可以写DEFAULT 0作为约束
-
-- 将商品表中的数据复制到商品复制表中 INSERT INTO productcopy (product_id, product_name, product_type, sale_price, purchase_price, regist_date) SELECT product_id, product_name, product_type, sale_price, purchase_price, regist_date FROM Product;
-
-
索引
-
创建索引的3种方式
-
#第一种方式,创建表格的时候创建索引 CREATE TABLE mytable { ID INT NOT NULL, INDEX(ID) }; #第二种方式,使用CREATE INDEX创建索引 CREATE [UNIQUE] INDEX index_name ON table_name(column_list) #第三种方式,使用ALTER TABLE 创建索引 ALTER TABLE table_name ADD INDEX index_name(column_list) ALTER TABLE table_name ADD UNIQUE(column_list) ALTER TABLE table_name PRIMARY KEY (column_list)
-
-
索引分类
- 主键索引,只能有一个
- 唯一索引,UNIQUE字段,可以有多个,允许有多个空值
- 普通索引,建立在普通字段上
- 前缀索引,字符类的前几个字符,char,vchar,binary,varbinary
- 全文索引,建立在char,varchar,text,建完表再创全文索引
- 单列索引
- 联合索引
-
练习题
1.1
问题:编写一条 CREATE TABLE 语句,用来创建一个包含表 1-A 中所列各项的表 Addressbook (地址簿),并为 regist_no (注册编号)列设置主键约束
表1-A 表 Addressbook (地址簿)中的列
答案:
CREATE TABLE addressbook
( #表格这用的是小括号不是C语言的花括号
regist_no INTEGER NOT NULL,
name_ VARCHAR(128) NOT NULL,
address VARCHAR(256) NOT NULL, #VARCHAR以及CHAR后面带的都是小括号
tel_no CHAR(10),
mail_address char(20),
PRIMARY KEY(regist_no)
);
创建完表格记得点击下图中刷新按钮(居然不会自动刷新???
标签:TASK1,product,name,--,数据库,MySQL,DataWhale,SQL,TABLE 来源: https://www.cnblogs.com/msspansion/p/16287142.html