mysql
数据库管理软件
Mysql 关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成
表头(header): 每一列的名称;
- 列(row): 具有相同数据类型的数据的集合;
- 行(col): 每一行用来描述某个人/物的具体信息;
- 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
- 键(key): 表中用来识别某个特定的人\物的方法, 键的值在当前列中具有唯一性。
MySQL 服务端操作
在 Windows 命令提示符下运行:
启动: net start MySQL
停止: net stop MySQL
卸载: sc delete MySQL
MySQL 客户端操作
Windows cmd 下 键入
启动: mysql -h主机名 -u用户名 -p密码
退出: exit/quit
创建本机登录 create user 'zc'@'localhost' identified by '123456';
创建指定ip登录 create user 'zc'@'192.168.11.32' identified by '123456';
创建相同网段登录 create user 'zc'@'192.168.11.%' identified by '123456';
查看当前用户 select user();
查看所有用户 select host,user from mysql.user;
删除本机账户 drop user 'zc'@'localhost';
删除指定IP drop user 'zc'@'192.168.11.32';
用户授权 授权 zc 对mysql中的user表有所有的权限 grant all on mysql.user to 'zc'@'localhost'; 授权 zc 对mysql中的user表用查的权限 grant select on mysql.user to 'zc'@'localhost'; 授权 zc 对mysql中的user表有增和查的权限 grant select,insert on mysql.user to 'zc'@'localhost'; 授权 zc 对mysql中的user表有增改查的权限 grant select,insert,update on mysql.user to 'zc'@'loccalhost'; 授权 zc 对mysql中的user表有增删改查的权限 grant select,insert,update,delete on mysql.user to 'zc'@'localhost'; 授权 zc 对所有的库和表都有查和增的权限 grant select,insert on *.* to 'zc'@'localhost'; 刷新权限 flush privileges; 查看权限 show grants for 'zc'@'192.168.11.%'; 创建库 create database zc charset utf-8; show databases; 库不存在再创建 create database if not exists zc; 使用admin建库 mysqladmin -uroot -p密码 create zc 删库 drop database zc; mysqladmin -u root -p密码 drop zc
create table if not exists `zc`( `id` int unsigned auto_increment, `title` varchar(100) not null, `author` varchar(40) not null, `date` date, primary key ( `id` ) )engine=InnoDB default charset=utf8; auto_increment #定义自增属性,一般用于主键,数字会自动加1 not null #设置字段不能为空,操作是输入改字段为空就会报错 primary key #定义列为主键,可以使用多列来定义主键,列间以逗号分隔 engine #设置存储引擎 charset #设置编码 查看表结构 desc 表名; 修改某个字段属性 alter table 表名 modify name char(4); #将char(1)更改为char(4); 修改字段名称 alter table 表名 change name(原名) stu_name(新名) char(4); use 库名; --创建表-- show tables; --数据增删改查insert into/delete from/update/select * from 表名 where 条件 --改表中字段类型modify/改字段名称change原名 新名 --删表 drop table 表名; 增 insert into 表名(A B C) values (a,b,c); 查 select * from 表名 where 条件; 改 update 表名 set stu_name = '山西'; 删 delete from 表名 where id=1; 清空表 delete from 表名; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。 truncate table test; #删除速度比上一条快,且直接从零开始 删除表 drop table 表名; 显示数据表的详细索引信息,包括PRIMARY KEY(主键) show index from 表名; 按列打印 zc 数据库中以 zc 开头的表的信息(查看某个表就把 runoob% 变成表名) show table status from zc like 'zc%'\G;
显示数据库 show databases;
创建数据库: create database 名称 default charset utf8 COLLATE utf8_general_ci;
CREATE DATABASE 数据库名称 DEFAULT CHARACTER
SET
gbk COLLATE gbk_chinese_ci;
使用库: use 库名;
创建表: create table 表名(字段 类型) ENGINE
=
InnoDB DEFAULT CHARSET
=
utf8;
create table tb( id int not null defalut 2, num int not null );
自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列) create table tb1( id int not null auto_increment primary key, num int null ) 或 create table tb1( id int not null auto_increment, num int null, index(id) ) 注意:1、对于自增列,必须是索引(含主键)。 2、对于自增可以设置步长和起始值 show session variables like 'auto_inc%'; set session auto_increment_increment=2; set session auto_increment_offset=10; show global variables like 'auto_inc%'; set global auto_increment_increment=2; set global auto_increment_offset=10;
外键,一个特殊的索引,只能是指定内容 creat table color( nid int not null primary key, name char(16) not null ) create table fruit( nid int not null primary key, smt char(32) null , color_id int not null, constraint fk_cc foreign key (color_id) references color(nid) )
一个表中只能有一个自增的列,而且自增列必须是一个主键
表内容操作
增 insert into 表 (列名,列名...) values (值,值,值...) insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...) insert into 表 (列名,列名...) select (列名,列名...) from 表 删 delete from 表 delete from 表 where id=1 and name='alex' 改 update 表 set name = 'alex' where id>1 查 select * from 表 select * from 表 where id > 1 select id,name,gender as g from 表 where id > 1
a、条件 select * from 表 where id > 1 and name != 'alex' and num = 12; select * from 表 where id between 5 and 16; select * from 表 where id in (11,22,33) select * from 表 where id not in (11,22,33) select * from 表 where id in (select nid from 表) b、通配符 select * from 表 where name like 'ale%' - ale开头的所有(多个字符串) select * from 表 where name like 'ale_' - ale开头的所有(一个字符) c、限制 select * from 表 limit 5; - 前5行 (包括第5行) select * from 表 limit 4,5; - 从第4行开始的5行(第4行后的5行,不包括第4行) select * from 表 limit 5 offset 4 - 从第4行开始的5行 d、排序 select * from 表 order by 列 asc - 根据 “列” 从小到大排列 select * from 表 order by 列 desc - 根据 “列” 从大到小排列 select * from 表 order by 列1 desc,列2 asc - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序 e、分组 select num from 表 group by num select num,nid from 表 group by num,nid select num,nid from 表 where nid > 10 group by num,nid order nid desc select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid select num from 表 group by num having max(id) > 10 特别的:group by 必须在where之后,order by之前 f、连表 无对应关系则不显示 select A.num, A.name, B.name from A,B Where A.nid = B.nid 无对应关系则不显示 select A.num, A.name, B.name from A inner join B on A.nid = B.nid A表所有显示,如果B中无对应关系,则值为null select A.num, A.name, B.name from A left join B on A.nid = B.nid B表所有显示,如果B中无对应关系,则值为null select A.num, A.name, B.name from A right join B on A.nid = B.nid g、组合 组合,自动处理重合 select nickname from A union select name from B 组合,不处理重合 select nickname from A union all select name from B
MySQL中的数据类型
- 数字类型:
- 整数: tinyint、smallint、mediumint、int、bigint
- 浮点数: float、double、real、decimal
- 日期和时间: date、time、datetime、timestamp、year
- 字符串类型:
- 字符串: char、varchar
- 文本: tinytext、text、mediumtext、longtext
- 二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob
1、整型
tinyint(m) | 1个字节 范围(-128~127) |
smallint(m) | 2个字节 范围(-32768~32767) |
mediumint(m) | 3个字节 范围(-8388608~8388607) |
int(m) | 4个字节 范围(-2147483648~2147483647) |
bigint(m) | 8个字节 范围(+-9.22*10的18次方) |
取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。 int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度,不知道这个m有什么用。
2、浮点型(float和double)
MySQL数据类型 | 含义 |
float(m,d) | 单精度浮点型 8位精度(4字节) m总个数,d小数位 |
double(m,d) | 双精度浮点型 16位精度(8字节) m总个数,d小数位 |
设一个字段定义为float(5,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。
3、定点数
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。 decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。
4、字符串(char,varchar)
char和varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
3.char类型的字符串检索速度要比varchar类型的快。
5.日期时间类型
MySQL数据类型 | 含义 |
date | 日期 '2008-12-2' |
time | 时间 '12:25:36' |
datetime | 日期时间 '2008-12-2 22:06:44' |
timestamp | 自动存储记录修改时间 |
若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。
数据类型的属性
MySQL关键字 | 含义 |
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |