MYSQL(1)
一、MySQL概述
1、什么是数据库
存储数据的仓库
2、哪些公司在用数据库
金融机构、游戏网站、购物网站、论坛网站 ... ...
3、数据库服务软件
1、软件分类:
MySQL、Oracle、SQL_Server、MongoDB、DB2、Maraidb
2、生产环境中如何选择使用哪个数据库软件
1、是否开源
1、开源软件 :MySQL、Mariadb、MongoDB
2、商业软件 :Oracle、DB2、SQL_Server
2、是否跨平台
1、不跨平台 :SQL_Server
2、跨平台 :...
3、公司的类型
1、商业软件 :政府部门、金融机构
2、开源软件 :游戏网站、购物网站、论坛网站 ...
4、MySQL特点
1、关系型数据库
1、数据以 行和列(表) 的形式去存储的
2、表中行:一条记录 列:一个字段
3、表和表之间的逻辑关联叫关系
示例:
1、关系型数据库存储
表1、学生信息表
姓名 年龄 班级
星矢 25 三班
水冰月 23 六班
表2、班级信息表
班级 班主任
三班 大空翼
六班 松人
2、非关系型数据库存储
{"姓名":"星矢","年龄":25,"班级":"三班","班主任":"大空翼"}
{"姓名":"水冰月","年龄":23,"班级":"六班","班主任":"松人"}
2、跨平台
在Windows、Linux、Unix运行数据库服务
3、支持多种编程语言
python、java、php ... ...
5、数据库软件、数据库、数据仓库
1、数据库软件
看的见、可操作,实现数据库的逻辑功能
2、数据库
逻辑概念,存储数据,侧重于存储
3、数据仓库
数据量特别庞大,主要用于数据分析、数据挖掘
数据库 :user表
数据仓库 :哪个时间段用户登录最多,哪个用户购物最多
二、MySQL安装
1、Ubuntu安装MySQL服务
1、安装服务端
sudo apt-get install mysql-server
2、安装客户端
sudo apt-get install mysql-client
3、Ubuntu安装软件
1、sudo apt-get install update ##更新源文件列表
2、sudo apt-get -f install ##作用:修复依赖关系
2、Windows安装MySQL服务
1、下载安装包(windows)
mysql-installer***5.7***.msi
2、双击安装
3、Mac安装MySQL
1、下载安装包
2、设置环境变量
1、vi .bash_profile
2、添加如下内容保存退出
export PATH=${PATH}:/usr/local/mysql/bin
3、终端 :source .bash_profile
4、验证 :mysql -uroot -p密码
三、启动和连接MySQL服务
1、服务端启动
查看服务状态
sudo /etc/init.d/mysql status #查看mysql当前服务状态
sudo /etc/init.d/mysql start #启动mysql服务
sudo /etc/init.d/mysql stop #停止mysql服务
sudo /etc/init.d/mysql restart #重启服务
sudo /etc/init.d/mysql reload #重新加载配置文件
2、客户端连接
命令格式
mysql -h主机地址 -u用户名 -p密码
mysql -hlocalhost -uroot -p123456
# 本地登录可省略 -h 选项:mysql -uroot -p
3、查看mysql版本
方法一:status;
方法二:select version();
4、Mysql启动、停止、重启常用命令
a、启动方式
1、使用 service 启动:
[root@localhost /]# service mysqld start (5.0版本是mysqld)
[root@szxdb etc]# service mysql start (5.5.7版本是mysql)
2、使用 mysqld 脚本启动:
/etc/inint.d/mysql start
3、使用 safe_mysqld 启动:
safe_mysqld&
b、停止
1、使用 service 停止:
service mysqld stop
2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld stop
3、mysqladmin shutdown
c、重启
1、使用 service 启动:
service mysqld restart
service mysql restart (5.5.7版本命令)
2、使用 mysqld 脚本启动:
/etc/init.d/mysqld restart
四、基本SQL命令
1、SQL命令的使用规则
1、每条命令必须以 ; 结尾
2、SQL命令不区分字母大小写
3、使用 \c 终止当前命令的执行
2、库的管理
1、库基本操作
1、查看所有库
show databases;
2、创建库(指定字符集)
create database 库名 character set utf8;
3、查看创建库的语句(查看字符集)
show create database 库名;
4、查看当前所在库
select database();
5、切换库
use 库名;
6、查看库中的表
show tables;
7、删除库
drop database 库名;
2、库的命名规则
1、数字、字母、_,但是不能是纯数字
2、库名区分字母大小写
3、不能使用特殊字符 和 MySQL关键字
3、练习
1、创建库 testdb,指定字符集为 utf8
create database testdb character set utf8;
2、进入库 testdb
use testdb;
3、查看当前所在库
select database();
4、创建库 testdb2,字符集为 latin1
create database testdb2 character set latin1;
5、进入到库 testdb2
use testdb2;
6、查看库 testdb2 的字符集是什么
show create database testdb2;
7、查看库 testdb2 中的所有表
show tables;
8、删除库 testdb
drop database testdb;
9、删除库 testdb2
drop database testdb2;
3、表的管理
1、表的基本操作
1、创建表(别忘了选择库,指定字符集)
create table 表名(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型)character set utf8;
2、查看创建表的语句(字符集、存储引擎)
show create table 表名;
3、查看表结构
desc 表名;
4、删除表
drop table 表名;
2、练习
1、创建库 python1
create database python1;
2、在python1库中创建表 pymysql,指定字符集为utf8,字段有3个:
id int, name char(15) ,age int
use python1;
create table pymysql(
id int,
name char(15),
age int
)character set utf8;
3、查看表 pymysql 的字符集和存储引擎
show create table pymysql;
4、查看表 pymysql 的表结构
desc pymysql;
5、删除表 pymysql
drop table pymysql;
6、创建库 python2
create database python2;
7、在库 python2 中创建表t1并指定字符集utf8,字段有 username char(20),password char(20)
use python2;
select database();
create table t1(
username char(20),password char(20)
)character set utf8;
show tables;
8、查看t1的表结构
desc t1;
9、删除表 t1
drop table t1;
10、删除库 python2
drop database python2;
4、注意
所有数据都是以文件形式存储在数据库目录下/var/lib/mysql
5、表记录管理
1、插入(insert)
1、insert into 表名 values(值1),(值2);
例:insert into t1 values(1,"Lucy"),(2,"Tom");
2、insert into 表名(字段1,字段2) values(值1),(值2);
例:insert into t1(name) values("bob"),("Jim");
2、查询(select)
1、select * from 表名 where 条件;
2、select 字段1,字段2 from 表名 where 条件;
3、练习
1、查看所有库
show databases;
2、创建新库 studb
3、在库studb中创建表 tab1,指定字符集utf8
字段(4个): id、name、age、score
use studb;
create table tab1(
id int,
name char(20),
age int,
score int
)character set utf8;
4、查看tab1的表结构
desc tab1;
5、在tab1中任意插入2条记录
insert into tab1 values (1,"唐伯虎",23,88),(2,"祝枝山",22,60);
6、查询所有表记录
select * from tab1;
7、在tab1中name、score两个字段插入2条记录
insert into tab1(name,score) values ("文征明",55),("秋香",99);
8、查看表tab1中所有人的姓名和年龄
select name,age from tab1;
9、查看表tab1中成绩及格的学生信息(高于60分)
select * from tab1 where score>60;
五、如何更改库的默认字符集
1、方法 :更改配置文件
2、步骤
1、获取root权限:sudo -i
2、cd /etc/mysql/mysql.conf.d
3、cp mysqld.cnf mysqld.cnf.bak
4、subl mysqld.cnf
5、在[mysqld]下的tmpdir = /tmp添加
character_set_server = utf8
6、/etc/init.d/mysql restart (然后exit退出)
3、Mac本
vi /etc/my.cnf
写入:
[mysqld]
character_set_server = utf8
六、客户端把数据存储到数据库服务器上的过程
1、连接到数据服务器 :mysql -u用户名 -p
2、选择库 :use 库名
3、创建/修改表 :update 表名
4、断开与数据库连接 :exit; | quit; | \q;
七、数据类型
1、数值类型
1、整型
1、int 大整型(4个字节)
取值范围 :0 ~ (2**32 - 1) 42亿多
2、tinyint 微小整型(1个字节)
1、有符号(signed默认) : -128~127
2、无符号(unsigned) : 0~255
age tinyint unsigned,
3、smallint 小整型(2个字节) 不常用,了解
4、bigint 极大整型(8个字节) 不常用,了解
2、浮点型
1、float (4个字节,最多显示7个有效位数字)
字段名 float(m,n) m->总位数 n->小数位位数
float(5,2) 取值范围:-999.99 ~ 999.99
## m的值最大为7
2、double (8个字节,最多显示15个有效位)
字段名 double(m,n) 效率较低,不常用
3、decimal(m,n)
存储空间(整数部分、小数部分分开存储)
规则:将9的倍数包装成4个字节
余数 字节
0 0
1-2 1
3-4 2
5-6 3
7-8 4
例:decimal(19,9)
整数部分:10/9=1余1 商4字节+余数1字节=5
小数部分:9/9=1余0 商4字节+余数0字节=4
总共 :5+4=9个字节
4、注意
1、浮点型插入整数时,自动补全小数位位数
2、小数位如果多于指定位数,对指定位下一位四舍五入
3、练习
1、新建库studb2,并在库中创建表stuinfo,要求:
id : 大整型
name : 字符类型,宽度为15
age : 微小整型,不能为负数
height : 浮点型,小数位为2位(float)
money : 浮点型,小数位为4位(decimal)
create database studb2;
use studb2;
create table stuinfo(
id int,
name char(15),
age tinyint unsigned,
height float(5,2),
money decimal(20,4));
2、查看表结构
desc stuinfo;
3、查看表字符集和存储引擎
show create table stuinfo;
4、在表中插入1条完整记录
insert into stuinfo values
(1,"小昭",26,165,8888.88);
5、查询所有表记录
select * from stuinfo;
6、在表中id、name和money三个字段插入2条记录
insert into stuinfo(id,name,money) values
(2,"赵敏",200000),(3,"周芷若",18000.23);
7、查询所有学生的 编号、姓名和money
select id,name,money from stuinfo;
2、字符类型
1、char :定长
char(宽度) 宽度取值范围:1 - 255
2、varchar :变长
varchar(宽度) 宽度取值范围 :1 - 65535
3、text / longtext(4G) /blob / longblob (不常用)
4、char 和 varchar的特点
1、char :浪费存储空间,性能高
2、varchar :节省存储空间,性能低
5、char 和 varchar的区别
char会自动填空格,varchar根据字节开辟相应的空间。
6、字符类型的宽度和数值类型宽度的区别
1、数值类型宽度为显示宽度,只用于select查询时显示,和占用存储无关,可用zerofill查看效果
2、字符类型的宽度超过后无法存储(字符宽度指字符个数,与字节无关)
3、枚举类型
1、单选enum
sex enum(值1,值2,...)
2、多选set
likes set(值1,值2,...)
## 插入记录时 "study,python,mysql"
示例:
create table t3(id int,name varchar(20),
sex enum("boy","gril","secret"),
likes set("gril","boy","staudy","python","mysql"));
作业:
1、MySQL中数据类型有:______、______、______、______
2、关系型数据库的核心内容是 关系 即 二维表
3、简述客户端把数据存储到数据库服务器上的过程
4、char和varchar的区别,各自的特点
##Crtl+L为mysql终端清屏,as别名用法:select max(gongji) as max from sanguo;
Ctrl+Shift+T 多开终端窗口
====================================================================
Day02笔记
一、数据类型
1、数值类型
2、字符类型
3、枚举类型
4、日期时间类型
1、date :"YYYY-MM-DD"
2、datetime :"YYYY-MM-DD HH:MM:SS"
3、timestamp :"YYYY-MM-DD HH:MM:SS"
4、time :"HH:MM:SS"
5、注意(区别)
datetime :不给值默认返回 NULL
timestamp :不给值默认返回系统当前时间
6、示例
1、创建一张表,用户充值表
create table t2(
id int,
username varchar(20),
password varchar(20),
money int,
birthday date,
ztime timestamp
)character set utf8;
2、插入记录
insert into t2 values (1,"用户1","123456",500,"1995-05-20","2018-08-30 09:40:30");
insert into t2 values (2,"用户2","123456",600,"1992-02-20",now());
二、日期时间函数
1、now() 返回服务器当前时间
2、curdate() 当前日期 curtime()当前时间
3、date("1999-09-09 09:09:09") 提取 年月日
4、time("...") 提取 时分秒
5、year("...") 提取 年
6、练习
1、查找2018年8月30日用户充值的详细信息
select * from t2 where date(cztime)="2018-08-30";
2、查找2018年8月份所有用户充值的信息
select * from t2 where
date(cztime)>="2018-08-01" and date(cztime)<="2018-08-31";
3、查找2018年08月30日 08:00-10:00之间用户充值信息
select * from t2 where cztime>="2018-08-30 08:00:00" and cztime<="2018-08-30 10:00:00";
三、日期时间运算
1、语法格式
select * from 表名
where 字段名 运算符(now()-interval 时间间隔单位);
时间间隔单位:
2 day | 3 hour | 1 minute | 2 year | 3 month
2、示例
1、查询1天以内的充值记录
select * from t2 where
cztime>=(now()-interval 1 day); (如现在时间为2018年8月30日10:04:00,等同于 ctime>="2018-08-29 10:04:00";)
2、查询1年以前的充值记录
select * from t2 where
cztime<(now()-interval 1 year);
3、查询1天以前、3天以内的充值记录
select * from t2 where
cztime>=(now()-interval 3 day) and
cztime<=(now()-interval 1 day);
四、表字段操作
1、语法 :alter table 表名 ...;
2、添加字段(add)
alter table 表名 add 字段名 数据类型; (放在最后一列)
alter table 表名 add 字段名 数据类型 first; (放在第一列)
alter table 表名 add 字段名 数据类型 after 字段名; (插入指定位置)
3、删除字段(drop)
alter table 表名 drop 字段名;
4、修改字段数据类型(modify)
alter table 表名 modify 字段名 新数据类型;
## 会受到表中已有数据的限制(只能往大了改,否则可能会报错Out of range)
5、修改表名(rename)
alter table 表名 rename 新表名;
6、修改字段名(change)
alter table 表名 change 原字段名 新字段名 数据类型; (数据类型不变)
例:alter table new_t3 change name username char(15);
7、练习
1、在 db2 库中创建表 stutab ,字段有3个:
name、age、phnumber
use db2;
create table stutab(
name char(20),
age tinyint,
phnumber bigint
);
2、在表中第一列添加一个 id 字段
alter table studab add id int first;
3、把 phnumber 的数据类型改为 char(11)
alter table studab modify phnumber char(11);
4、在表中最后一列添加一个字段 address
alter table studab add address varchar(30);
5、删除表中的 age 字段
alter table stutab drop age;
五、表记录操作
1、删除表记录(delete)
1、delete from 表名 where 条件;
2、注意
一定要加where条件,不加where条件全部删除表记录
2、更新表记录(update)
1、update 表名 set 字段1=值1,字段2=值2 where 条件;
2、注意
一定要加where条件,不加where条件全部更新表记录
六、运算符操作
1、数值比较&&字符比较&&逻辑比较
1、数值比较 := != > >= < <=
2、字符比较 := !=
3、逻辑比较 :
1、and :两个或者多个条件同时成立
2、or :有1个条件满足即可
where country="蜀国" or country="魏国";
4、练习
1、查找攻击力高于150的英雄的名字和攻击值
select name,gongji from sanguo where gongji>150;
2、将赵云的攻击力设置为360,防御力设置为88,名字改为赵子龙
update sanguo set gongji=360,fangyu=88,name="赵子龙" where name="赵云";
3、将吴国英雄中攻击值为110的英雄的攻击值改为100,防御力改为60
update sanguo set gongji=100,fangyu=60
where country="吴国" and gongji=110;
4、查找蜀国和魏国的英雄信息
select * from sanguo where
country="蜀国" or country="魏国";
5、找出攻击力高于200的蜀国英雄的名字、攻击值和国家
select name,gongji,country from sanguo where gongji>200 and country="蜀国";
2、范围内比较
1、between 值1 and 值2
2、in(值1,值2)
3、not in(值1,值2)
4、练习
1、查找攻击值100-200之间的蜀国英雄信息
select * from sanguo
where
(gongji between 100 and 200) and country="蜀国";
2、查找蜀国和吴国以外的国家的女英雄信息
select * from sanguo
where country not in("蜀国","吴国") and sex="女";
3、查找id为1、3或5的蜀国英雄 和 貂蝉的信息
select * from sanguo
where
(id in(1,3,5) and country="蜀国") or name="貂蝉";
3、匹配空 和 非空
1、空 :is null
2、非空 :is not null
3、练习
1、查找姓名为 NULL 的蜀国男英雄信息
select * from sanguo
where
name is NULL and country="蜀国" and sex="男";
2、查找姓名为 "" 的英雄信息
select * from sanguo where name="";
3、在所有蜀国英雄中查找攻击力大于150的并且名字不为NULL的英雄的姓名、攻 击值和国家
select name,gongji,country from sanguo where
country="蜀国" and gongji>150 and name is not NULL;
4、查找魏蜀两国英雄中攻击力小于200并且防御力小于80的英雄信息
select * from sanguo where
country in("魏国","蜀国") and gongji<200 and fangyu<80;
4、注意
1、NULL :空值,只能用is、is not去匹配
2、"" :空字符串,只能用 =、!= 去匹配
4、模糊查询(like)
1、where 字段名 like 表达式
2、表达式
1、_ :匹配单个字符
2、% :匹配0到多个字符
3、练习
# name中有2个字符以上的
select name from sanguo where name like "_%_";
# 匹配所有,但不包括NULL
select name from sanguo where name like "%";
# 匹配名字为3个字符
select name from sanguo where name like "___";
# 匹配姓赵的英雄
select name from sanguo where name like "赵%";
七、SQL高级查询
1、总结
3、select ...聚合函数 from 表名
1、where ...
2、group by ...
4、having ...
5、order by ...
6、limit ...; (序号为执行顺序)
2、order by :给查询结果排序
1、order by 字段名 ASC/DESC
2、ASC(默认) :升序
DESC :降序
3、练习
1、将所有英雄按防御值从高到低排序
select * from sanguo order by fangyu DESC;
2、将蜀国英雄按攻击值从高到低排序
select * from sanguo
where country="蜀国" order by gongji DESC;
3、将魏蜀两国英雄中名字为3个字的,按防御值升序排序
select * from sanguo where country in("魏国","蜀国") and name like "___" order by fangyu;
select * from sanguo where (country="蜀国" or country="魏国") and name like "___" order by fangyu;
select * from sanguo where (country="蜀国" and name like "___") or (country="魏国" and name like "___") order by fangyu;
3、limit (永远放在SQL命令的最后写)
1、显示查询记录的条数
2、用法
limit n; --> 显示 n 条记录
limit m,n; --> 从第 m+1 条记录开始,显示 n 条
limit 2,3 : 显示第3、4、5三条记录
3、练习
1、在蜀国英雄中,查找防御值倒数第2名到倒数第4名的英雄的姓名、防御值和国家
select name,fangyu,country from sanguo
where country="蜀国"
order by fangyu ASC
limit 1,3;
2、在所有蜀国名字不为NULL的英雄中,查找攻击值前3名的英雄的姓名、攻击值和国家
select name,gongji,country from sanguo
where
country="蜀国" and name is not NULL
order by gongji DESC
limit 3;
4、分页
每页显示n条记录,显示第m页的内容,求第m页公式:limit (m-1)*n,n
示例:每页显示5条记录,显示第4页的内容
第1页 :limit (1-1)*5,5 # 1 2 3 4 5
第2页 :limit (2-1)*5,5 # 6 7 8 9 10
第3页 :limit (3-1)*5,5 # 11 12 13 14 15
...
第m页 :limit (m-1)*n,n
4、聚合函数
1、分类
avg(字段名) : 求该字段的平均值
sum(字段名) : 求和
max(字段名) : 最大值
min(字段名) : 最小值
count(字段名) : 统计该字段记录的个数(不能统计值为NULL)
2、练习
1、所有英雄中攻击力最大值
select max(gongji) from sanguo;
2、统计id、name两个字段分别有多少条记录
select count(id),count(name) from sanguo;
5、group by : 给查询的结果进行分组
1、查询表中都有哪些国家
select country from sanguo group by country;
2、计算每个国家的平均攻击力
select country,avg(gongji) from sanguo
group by country;
先分组 再聚合 再去重(聚合是针对每组值进行聚合)
蜀国
蜀国
蜀国 200 蜀国
魏国
魏国 200 魏国
吴国 100 吴国
3、注意
select之后的字段名如果没有在group by之后出现,则必须要对该字段进行聚合处理(聚合函数)
4、练习
1、查找所有国家中英雄数量最多的前2名的国家名称和英雄数量(count())
select country,count(id) as number from sanguo
group by country
order by number DESC
limit 2;
6、having语句
1、作用 :对查询结果进行进一步的筛选
2、练习
1、找出平均攻击力大于105的国家的前2名,显示国家名和平均攻击力
1、计算每个国家的平均攻击力
2、找到平均攻击力 > 105 的
select country,avg(gongji) as average from sanguo
group by country
having average>105
order by average DESC
limit 2;
3、注意
1、having语句通常和group by语句联合使用,过滤由group by语句返回的记录集
2、where只能操作表中实际存在字段,having语句可操作由聚合函数生成的显示列
7、表字段、表记录操作
表字段(alter table 表名) 表记录
增: add insert into 表名 ..
删: drop delete from 表名 ..
改: modify update 表名 set ...
查: desc 表名; select * from 表名 ..
====================================================================
Day03笔记
一、SQL查询去重
1、distinct : 不显示字段的重复值
1、语法 :select distinct 字段1,字段2 from 表名;
2、示例
1、表中都有哪些国家
select distinct country from sanguo;
2、表中一共有几个国家
select count(distinct country) as n from sanguo;
3、注意
1、distinct和from之间的所有字段值都相同才会去重
2、查询表记录时可以做数学运算
1、运算符 :+ - * / %
2、示例
查询时显示所有英雄攻击力翻倍
select id,name,gongji*2 as new from sanguo;
二、约束
1、作用 :保证数据的一致性、有效性
2、约束分类
1、默认约束(default)
插入记录时,不给该字段赋值,则使用默认值
sex enum("M","F","S") default "S",
2、非空约束(not null)
不允许该字段的值为 NULL
id int not null,
id int not null default 0,
三、索引
1、定义
对数据库中表的一列或多列的值进行排序的一种结构(BTree)

2、优点
加快数据的检索(查询)速度
3、缺点
1、当对表中数据更新时,索引需要动态维护,降低数据的维护速度(占用系统资源,导致数据库性能降低)
2、索引需要占用物理存储空间
四、索引示例
1、开启运行时间检测 :mysql命令行输入> set profiling=1;
查看profiling变量状态:show variables like "profiling"; ##set profiling=1为开启,set profiling=0为关闭。
2、执行查询语句
select name from t1 where name="lucy99999";
3、查看执行时间
show profiles;
4、在name字段创建索引
create index name on t1(name);
5、再次执行查询语句
select name from t1 where name="lucy100000";
6、查看执行时间
show profiles;
五、索引分类(4种)
1、普通索引(index)
1、使用规则
1、可设置多个字段,字段值无约束
2、把经常用来查询的字段设置为索引字段
3、KEY标志 :MUL
2、创建
1、创建表时
create table 表名(
字段名 数据类型,
字段名 数据类型,
index(字段名),
index(字段名));
示例:
create table t2(
id int,
name varchar(20),
sex enum("M","F"),
age tinyint,
index(id),
index(name));
2、已有表中(一般索引名和字段名相同)
create index 索引名 on 表名(字段名);
例:create index age on t2(age);
3、查看索引
1、desc 表名; -->KEY标志为 MUL
2、show index from 表名\G;(查看索引详细信息,\G用于竖着显示)
4、删除index
drop index 索引名 on 表名;
2、唯一索引(unique)
1、使用规则
1、可设置多个字段
2、约束 :字段值不允许重复,但可以为 NULL(允许多个NULL值的存在)
3、KEY标志 :UNI
2、创建
1、创建表时(同普通索引,把index换成unique即可)
create table 表名(
字段名 数据类型,
字段名 数据类型,
unique(字段名),
unique(字段名));
示例:
create table t3(
id int not null,
name varchar(20) not null,
phnumber char(11),
unique(phnumber));
2、已有表
create unique index 索引名 on 表名(字段名);
3、查看、删除同普通索引
删除 :drop index 索引名 on 表名;
3、主键索引(primary key)&&自增长属性(auto_increment)
1、使用规则
1、(一张表内)只能有1个字段为主键字段
2、约束 :字段值不允许重复,也不能为 NULL
3、KEY标志 :PRI
4、通常设置记录编号字段(id),能够唯一锁定一条记录
标识列:又称为自增长列
含义:可以不用手动的插入值,系统提供默认的序列值
特点:
1、标识列必须和主键搭配吗?不一定,但要求是一个key
2、一个表可以有几个标识列?至多一个!
3、标识列的类型只能是数值型
4、标识列可以通过 SET auto_increment_increment=3;设置步长
可以通过 手动插入值,设置起始值
2、创建
1、创建表时(记住方法一就行)
1、方法一
create table 表名(
id int primary key auto_increment,
字段名 数据类型);
示例:
create table t4(
id int primary key auto_increment,
name varchar(20) not null);
设置自增长起始值从10000开始:
create table t5(
id int primary key auto_increment,
name varchar(20) not null
)auto_increment=10000,charset=utf8,engine=InnoDB;
2、方法二
create table 表名(
id int auto_increment,
字段名 数据类型,
primary key(id));
示例:
create table t4(
id int auto_increment,
name varchar(20),
primary key(id));
2、已有表添加主键
alter table 表名 add primary key(id); (添加主键)
alter table 表名 modify id int auto_increment; (添加自增长属性)
示例:在已有表中设置自增长起始值从10000开始
alter table 表名 auto_increment=10000;
3、删除主键
1、先删除自增长属性(modify)-->即修改数据类型,用于自增长属性
alter table 表名 modify id int;
2、删除主键
alter table 表名 drop primary key;
4、外键(foreign key)
六、数据导入
1、作用 :把文件系统中内容导入到数据库中
2、语法格式
load data infile "文件名"
into table 表名
fields terminated by "分隔符"
lines terminated by "\n";
3、将socreTable.csv导入到数据库中
1、在数据库中创建对应的表
create table score(
id int,
name varchar(15),
score float(5,2),
phnumber char(11),
class char(7)
)character set utf8;
2、执行数据导入
1、查看搜索路径
show variables like "secure_file_priv";
## /var/lib/mysql-files
2、拷贝文件
另起一个终端 Ctrl+shift+t
sudo cp ~/scoreTable.csv /var/lib/mysql-files/
查看文件详细信息 :
sudo -i
cd /var/lib/mysql-files/
ls -l
3、执行数据导入
mysql--> load data infile "/var/lib/mysql-files/scoreTable.csv"
into table score
fields terminated by ","
lines terminated by "\n";
3、Mac本配置搜索路径:
sudo -i
vi my.cnf
[mysqld]
secure_file_priv="/usr/local/mysql/data/"
系统偏好设置 - 小海豚 - stop - start
mysql>show variables like "secure_file_priv";
七、数据导出
1、把数据库表的记录到处到系统文件里
2、语法格式
select ... from 表名 where 条件
into outfile "文件名"
fileds terminated by "分隔符"
lines terminated by "\n";
3、练习
1、把MOSHOU库下的sanguo表中,英雄的姓名、攻击值和国家给导出来,sanguo.csv
1、查看搜索路径
show variables like "%secure%";
2、执行数据导出语句
select name,gongji,country from MOSHOU.sanguo
into outfile "/var/lib/mysql-files/sanguo.csv"
fields terminated by ","
lines terminated by "\n";
Error: ... secure_file_priv ...
2、把 mysql 库下的user表中 user、host的值导出到系统文件 user.txt
select user,host from mysql.user
into outfile "/var/lib/mysql-files/user.txt"
fields terminated by " "
lines terminated by "\n";
3、sudo -i
cd /var/lib/mysql-files/ ls
4、查看、更改文件权限
1、ls -l score.txt
- rw- rw- r-- tarena tarena
r(4) : 读 所有者 所属组
w(2) : 写
(1) : 可执行
rw- : 所有者权限
rw- : 同组其他用户文件
r-- : 其他组的用户权限
2、chmod 777 score.txt
chmod 740 score.txt
八、表的复制
1、语法
create table 表名 select ... from 表名 where 条件;
2、示例
1、复制MOSHOU.sanguo表,sanguo2
create table MOSHOU.sanguo2 select * from MOSHOU.sanguo;
2、复制MOSHOU.sanguo中的id、name、country的记录,sanguo3
create table MOSHOU.sanguo3 select id,name,country from MOSHOU.sanguo;
3、复制MOSHOU.sanguo中的name、country,每页显示2条记录,复制第3页的内容
create table MOSHOU.sanguo4 select name,country from sanguo limit 4,2;
3、复制表结构
create table 表名 select ... from 表名 where false;
====================================================================
mysql workbench汉化教程:https://blog.csdn.net/weixin_40423737/article/details/80193680
Ubuntu系统替换文件放在workbench的安装数据目录,路径是:/usr/share/mysql-workbench/data
打开以后,可以看到下面有一堆的xml结尾的文件,而workbench的菜单就是
main_menu.xml
posted on 2018-09-24 17:05 破天荒的谎言、谈敷衍 阅读(625) 评论(0) 收藏 举报
浙公网安备 33010602011771号