mysql数据库知识点总结
一.数据库的基本操作
--------------------------------------------------------------数据库的安装以后更新----------------------------------------------------------------------------------
在Linux系统下:
1.启动数据库服务:sudo service mysql start
2.停止数据库服务:sudo service mysql stop
3.重启数据库服务:sudo service mysql restart
4.进入MySQL数据库:mysql -u用户名 -p密码
5.创建一个数据库:create database 数据库名 charset='utf8'; 注意:一定要写上数据库编码方式。否则会出现一系列的麻烦。
6.查看创建数据库的语句:show create database 数据库名;
7.查看当前所有数据库:show databases; 注意:这里没有小括号
8.进入一个数据库:use 数据库名;
9.查看当前正在用的数据库:select database(); 注意:这里有小括号
10.查看当前时间:select now();
11.删除数据库:drop database 数据库名;
二.数据的完整性
数据类型:
1.整数:int、bit
2.小数:decimal 说明:decimal(5,2)表示该小数一共有五位数,其中小数占两位。
3.字符串:varchar、char 说明:varchar(3)输入'ab',实际存储为'ab',输入'abcd',实际存储为'abc'。char(3)输入'ab',实际存储为'ab ',输入'abcd',实际存储为'abc'
4.时间:date(2017-12-12)、time(12:30:54)、datetime(2017-12-12 12:30:54)
5.枚举:enum
数据的约束:
1.主键:primary key 说明:primary key 相当于 not null 和 unique
2.外键:foreign key
3.非空:not null
4. 唯一性:unique
5.默认值:default
6.取正数:unsigned
7.主键自增:auto_increment
三.表结构的基本操作
1.创建一个student学生表:
create table student(
id int unsigned primary key auto_increment, unsigned只能放在数据类型(int)的后面,放在约束后面直接报错,不要问我为什么,记住就行了。
name varchar(10) not null,
age int unsigned not null,
height decimal(5,2) default 0, 写了默认值就不需要再写not null。
gender enum("男","女") default "男", 这里默认值只能写enum中的汉字,不能写索引。
birth date,
is_delete bit default 0 bit只有两个取值0和1。这里不要再写逗号
); 最后必须分号结束
2.查看表格的创建语句:show create table student;
3.查看表结构:desc student;
4.查看所有的表格:show tables;
5.删除表格:drop table student;
6.添加一个addr字段,varchar(20),非空:alter table student add addr varchar(20) not null ;
7.将addr改为address:alter table student change addr address varchar(20) not null;
8.将address的varchar(20)改为varchar(50):alter table student modify address varchar(50) not null;
9.删除address字段:alter table student drop address;
四.数据的CRUD(create增加、retrieve检索、update更新、delete删除 )
-------------------------------------------------------------------------待更新-----------------------------------------------------------------------------------
五.SQL语句的强化
准备数据:
-- 创建 "京东" 数据库
create database jing_dong charset=utf8; -- 使用 "京东" 数据库
use jing_dong; -- 创建一个商品goods数据表
create table goods(
id int unsigned primary key auto_increment not null,
name varchar(150) not null,
cate_name varchar(40) not null,
brand_name varchar(40) not null,
price decimal(10,3) not null default 0,
is_show bit not null default 1,
is_saleoff bit not null default 0
);
-- 向goods表中插入数据 insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default);
insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default);
insert into goods values(0,'g150th 15.6英寸游戏本','游戏本','雷神','8499',default,default);
insert into goods values(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',default,default);
insert into goods values(0,'x240 超极本','超级本','联想','4880',default,default);
insert into goods values(0,'u330p 13.3英寸超极本','超级本','联想','4299',default,default);
insert into goods values(0,'svp13226scb 触控超极本','超级本','索尼','7999',default,default);
insert into goods values(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',default,default);
insert into goods values(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default);
insert into goods values(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',default,default);
insert into goods values(0,'ideacentre c340 20英寸一体电脑 ','台式机','联想','3499',default,default);
insert into goods values(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',default,default);
insert into goods values(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default);
insert into goods values(0,'at7-7414lp 台式电脑 linux )','台式机','宏碁','3699',default,default);
insert into goods values(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',default,default);
insert into goods values(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',default,default);
insert into goods values(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',default,default);
insert into goods values(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',default,default);
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);
insert into goods values(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',default,default);
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);
+----+---------------------------------------+---------------------+------------+-----------+---------+------------+
| id | name | cate_name | brand_name | price | is_show | is_saleoff |
+----+---------------------------------------+---------------------+------------+-----------+---------+------------+
| 1 | r510vc 15.6英寸笔记本 | 笔记本 | 华硕 | 3399.000 | | |
| 2 | y400n 14.0英寸笔记本电脑 | 笔记本 | 联想 | 4999.000 | | |
| 3 | g150th 15.6英寸游戏本 | 游戏本 | 雷神 | 8499.000 | | |
| 4 | x550cc 15.6英寸笔记本 | 笔记本 | 华硕 | 2799.000 | | |
| 5 | x240 超极本 | 超级本 | 联想 | 4880.000 | | |
| 6 | u330p 13.3英寸超极本 | 超级本 | 联想 | 4299.000 | | |
| 7 | svp13226scb 触控超极本 | 超级本 | 索尼 | 7999.000 | | |
| 8 | ipad mini 7.9英寸平板电脑 | 平板电脑 | 苹果 | 1998.000 | | |
| 9 | ipad air 9.7英寸平板电脑 | 平板电脑 | 苹果 | 3388.000 | | |
| 10 | ipad mini 配备 retina 显示屏 | 平板电脑 | 苹果 | 2788.000 | | |
| 11 | ideacentre c340 20英寸一体电脑 | 台式机 | 联想 | 3499.000 | | |
| 12 | vostro 3800-r1206 台式电脑 | 台式机 | 戴尔 | 2899.000 | | |
| 13 | imac me086ch/a 21.5英寸一体电脑 | 台式机 | 苹果 | 9188.000 | | |
| 14 | at7-7414lp 台式电脑 linux ) | 台式机 | 宏碁 | 3699.000 | | |
| 15 | z220sff f4f06pa工作站 | 服务器/工作站 | 惠普 | 4288.000 | | |
| 16 | poweredge ii服务器 | 服务器/工作站 | 戴尔 | 5388.000 | | |
| 17 | mac pro专业级台式电脑 | 服务器/工作站 | 苹果 | 28888.000 | | |
| 18 | hmz-t3w 头戴显示设备 | 笔记本配件 | 索尼 | 6999.000 | | |
| 19 | 商务双肩背包 | 笔记本配件 | 索尼 | 99.000 | | |
| 20 | x3250 m4机架式服务器 | 服务器/工作站 | ibm | 6888.000 | | |
| 21 | 商务双肩背包 | 笔记本配件 | 索尼 | 99.000 | | |
+----+---------------------------------------+---------------------+------------+-----------+---------+------------+
我们发现该数据库设计的有一些问题,是什么呢?
电脑的每种类型(cate_name)对应好多种款式的电脑,每种品牌(brand_name)也对应好多种款式,显然不符合数据库设计的三范式。
下面将goods表再拆分出两个表,分别是goods_cates商品类型表和goods_brands品牌表。
------------------------------------------------数据库的三范式以后更新----------------------------------------------------------------------------
商品类型表的创建:
1.创建goods_cates表:
-- 创建商品分类表
create table if not exists goods_cates(
id int unsigned primary key auto_increment,
name varchar(40) not null
);
2.将goods表中的cate_name同步到goods_cates表中的name:
insert goods_cates(name) select cate_name from goods group by cate_name;(第一种插入方式)
解释:先将goods表中的cate_name查询出来分好组,然后插入到goods_cates表中字段为name下。
注意:必须指定good_cates中的字段,否则程序不知道把查询出来的cate_name插入到什么字段中。
3.将goods_cates中的id同步到goods中:
update goods join goods_cates on goods.cate_name = goods_cates.name set goods.cate_name = goods_cates.id;
解释:可以将goods join goods_cates on goods.cate_name = goods_cates.name 这段代码看作一个整体,就是说先将goods表和goods_cates通过内连接建立一个虚表,然后更改goods.cate_name为goods_cates.id。
商品品牌表的创建:
1.创建goods_brands表同时插入数据:
-- 在创建数据表的时候一起插入数据
-- 注意: 需要对brand_name 用as起别名,否则name字段就没有值
create table goods_brands (
id int unsigned primary key auto_increment,
name varchar(40) not null) select brand_name as name from goods group by brand_name;(第二种插入方式)
2.同步goods中的数据(原理同上):
update goods join goods_brands on goods.brand_name = goods_brands.name set goods.brand_name = goods_brands.id;
最后的最后修改表结构,将cate_name改为cate_id,brand_name改为brand_id,这是一波新操作,瞧好:
alter table goods change cate_name cate_id int unsigned not null,change brand_name brand_id int unsigned not null;
最后goods表结果:
----+---------------------------------------+---------+----------+-----------+---------+------------+
| id | name | cate_id | brand_id | price | is_show | is_saleoff |
+----+---------------------------------------+---------+----------+-----------+---------+------------+
| 1 | r510vc 15.6英寸笔记本 | 5 | 2 | 3399.000 | | |
| 2 | y400n 14.0英寸笔记本电脑 | 5 | 7 | 4999.000 | | |
| 3 | g150th 15.6英寸游戏本 | 4 | 9 | 8499.000 | | |
| 4 | x550cc 15.6英寸笔记本 | 5 | 2 | 2799.000 | | |
| 5 | x240 超极本 | 7 | 7 | 4880.000 | | |
| 6 | u330p 13.3英寸超极本 | 7 | 7 | 4299.000 | | |
| 7 | svp13226scb 触控超极本 | 7 | 6 | 7999.000 | | |
| 8 | ipad mini 7.9英寸平板电脑 | 2 | 8 | 1998.000 | | |
| 9 | ipad air 9.7英寸平板电脑 | 2 | 8 | 3388.000 | | |
| 10 | ipad mini 配备 retina 显示屏 | 2 | 8 | 2788.000 | | |
| 11 | ideacentre c340 20英寸一体电脑 | 1 | 7 | 3499.000 | | |
| 12 | vostro 3800-r1206 台式电脑 | 1 | 5 | 2899.000 | | |
| 13 | imac me086ch/a 21.5英寸一体电脑 | 1 | 8 | 9188.000 | | |
| 14 | at7-7414lp 台式电脑 linux ) | 1 | 3 | 3699.000 | | |
| 15 | z220sff f4f06pa工作站 | 3 | 4 | 4288.000 | | |
| 16 | poweredge ii服务器 | 3 | 5 | 5388.000 | | |
| 17 | mac pro专业级台式电脑 | 3 | 8 | 28888.000 | | |
| 18 | hmz-t3w 头戴显示设备 | 6 | 6 | 6999.000 | | |
| 19 | 商务双肩背包 | 6 | 6 | 99.000 | | |
| 20 | x3250 m4机架式服务器 | 3 | 1 | 6888.000 | | |
| 21 | 商务双肩背包 | 6 | 6 | 99.000 | | |
+----+---------------------------------------+---------+----------+-----------+---------+------------+
六.MySQL高级
-----------------------------------------------------------------------待更新-------------------------------------------------------------------------------------------------------------
mysql数据库知识点总结的更多相关文章
- MySQL/数据库 知识点总结
书籍推荐 <SQL基础教程(第2版)> (入门级) <高性能MySQL : 第3版> (进阶) 文字教程推荐 SQL Tutorial (SQL语句学习,英文).SQL Tut ...
- MySQL数据库知识点整理 (持续更新中)
一.修改用户密码 格式(在命令行下输入):mysqladmin -u 用户名 -p旧密码 password 新密码 1. 给root添加密码ab12: mysqladmin -uroot -pass ...
- MySql数据库知识点
关系型数据库管理系统简介 为什么使用数据库 1.降低存储数据的冗余度 2.更高的数据一致性 3.存储的数据可以共享 4.可以建立数据库所遵循的标准 5.便于维护数据完整性 6.能够实现数据的安全性 数 ...
- Mysql数据库重要知识点(知了堂学习心得)
Mysql数据库知识点 1.管理数据库语句: 使用数据库: use test; 添加数据库: create database 数据库名; create database test; 修改数据库: al ...
- MySQL数据库开发规范知识点
前言: 设计规范更多的是为了确保数据库设计的合理性.为了项目最终的协调稳定性,而命名规范则更多的是为了确保设计的正式和统一. 约定优先于配置(Convention Over Configuration ...
- 知识点:Mysql 数据库索引优化实战(4)
知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 一:插入订单 业务逻辑:插 ...
- linux django 知识点 安装mysql数据库 和 pycharm
django 命令及相关知识点 1. 启动 pycharm 命令:sh pycharm.sh 2. 创建 django 项目 : django-admin.py startproject Hello ...
- 浅谈MySQL数据库面试必要掌握知识点
概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 MySQL官方地址 https://www.mysql.com/ MySQL 8系列最新版本为8.0.27,5系列的最 ...
- java用JDBC连接MySQL数据库的详细知识点
想实现java用JDBC连接MySQL数据库.需要有几个准备工作: 1.下载Connector/J的库文件,下载Connector/J的官网地址:http://www.mysql.com/downlo ...
随机推荐
- 原型链、构造函数、箭头函数、se6数组去重
原型链 例子如下: var arr = [1, 2, 3]; 其原型链为:arr ----> Array.prototype ----> Object.prototype ----> ...
- poj2385 - Apple Catching【动态规划】
Description It is a little known fact that cows love apples. Farmer John has two apple trees (which ...
- Cent os常见操作命令
1.查看防火墙状态:firewall-cmd –-state 2.关闭防火墙:systemctl stop firewalld.service 3.禁止防火墙开机启动:systemctl disabl ...
- The Morning after Halloween uva1601
这道题思路还是比较清晰的,建图加bfs或双向bfs,其实后者比前者少了将近一半的时间.. 建图可以把某一点所拥有邻接点长度(数目)记录在数组0这个位置,因为这道题使用vector会超时. #inclu ...
- 洛谷 P1348 Couple number
题目描述 任何一个整数N都能表示成另外两个整数a和b的平方差吗?如果能,那么这个数N就叫做Couple number.你的工作就是判断一个数N是不是Couple number. 输入输出格式 输入格式 ...
- A. Treasure Hunt Codeforces 线性代数
A. Treasure Hunt time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- MFS搭建
MooseFS是一个分布式存储的框架,其具有如下特性: 1.Free(GPL) 2.通用文件系统,不需要修改上层应用就可以使用 3.可以在线扩容,体系架构可伸缩性极强. ...
- [Cypress] Interact with Hidden Elements in a Cypress Test
We often only show UI elements as a result of some user interaction. Cypress detects visibility and ...
- GPS-Graph Processing System 改动源代码经验总结 (四)
HamaWhite原创,转载请注明出处.欢迎大家增加Giraph 技术交流群: 228591158 本文目的:在改动GPS源代码后,具体描写叙述怎样编译和分发到各Worker节点上. 以下以Graph ...
- pascal+sublime搭建Pascal学习环境
一.fpc安装 1. 下载:http://www.freepascal.org/down/i386/win32.var(或者:http://download.csdn.net/detail/wenph ...