MySQL的学习笔记
目录
1:简介
命令行窗口和MySQL服务器:C/S的关系,即客户端和服务器的关系。
基本语句
登录数据库:mysql -uroot -p 敲回车输入密码
数据库的增删用查语句:create database 数据库名; show databases; drop database 数据库名字;
use 数据库名字。使用数据库
没有重命名语句
数据表的增删改查语句:show tables; drop table 表名;重命名: rename table 旧名字 to 新名字 (不常用)
一个简单的建表语句:create table stu(
sid int,
sname varchar(10)
)engine myisam charset utf8;
插入数据: insert into stu values
(1,'zhangsan'),
(2,'lisi'),
(3,'wangwu');
清空表数据:truncate 表名;truncate stu;
truncate 和delete的区别:truncate相当于先删除表再重建一张结构相同的新表。delete是从删除行的层面来操作的。、
乱码问题:命令行窗口使用的是gbk编码,要告诉服务器,客户端使用的是gbk编码
命令行输入:set names gbk;
1064表示语法错误。
\c 命令行退出
2.增删改查基本语句
创建表:
create table class(
id int primary key auto_increment,
sname varchar(10) not null default '',
gender char(1) not null default '',
company varchar(20) not null default '',
salary decimal(6,2) not null default 0.00,
fanbu smallint not null default 0
)engine myisam charset utf8;
查看表的结构: desc class;
插入添加数据:insert语句
先set names gbk;
insert into class
(id,sname,gender,company,salary,fanbu)
values
(1,'张三','男','百度',8888.57,234);
插入部分列:
insert into class
(sname,gender,salary)
values
('赵六','男',8678.32);
注意:列与值必须一 一对应。
插入多行:
insert into class
(sname,gender,company,salary)
values
('刘备','男','皇室成员',8888.57),
('孙策','男','江东集团',8888.57),
('曹操','男','亳州',8888.57);
修改数据:update语句
update class
set
gender='女',
company='千度'
where id=1;
where后面加的是表达式,可以是任何过滤条件,不一定是id=。
删除数据:delete语句
删除都是删除一整行的数据,不能删除一行中的一列或几列。
delete from class where salary>8800;
查询数据:select语句
select sname,company,salary
from class
where id=6;
select * from class;
select * from class where id>3;
后续知识:如何自己建表
如何修改表(添加或减少列)
多表联查
子查询
触发器
事务
存储过程
备份恢复
3.列类型与建表语句
建表:只要把表的第一行,表头建好,表就建好了。
建表过程就是声明字段的过程。
存储同样的数据,不同的列类型,所占的空间和效率是不同的。
MySQL三大列类型
数值型:n个字节,有8n位,表示范围
整型
tinyint: 占据一个字节,存储范围是-128到127,或者0到255
smallint 2个字节 0-65535
mediuint 3个字节
int 4个字节
bigint 8个字节
声明整型时的参数:(M) unsgined zerofill. 默认是有符号的
无符号类型unsigned
alter table class add score tinyint unsigned not null default 0;
(M) 和zerofill一起使用。m表示宽度,单独使用没有意义。
alter table class add snum smallint(5) zerofill not null default 0;
浮点/定点型:
浮点数在计算机里比较复杂。也可以设置unsgined.(M)和zerofill
浮点 float(M,D); M叫精度,代表总位数;D是标度,代表小数点后面的位数。能存10^38,10^(-38).如果M<=24,占4个字节,否则占8个字节。 float的精度有时会损失。
定点 decimal(M,D): 把整数部分和小数部分 ,分开存储,比float精确。
create table salary (
-> sname varchar(20) not null default '',
-> salary float(6,2)
-> ) engine myisam charset utf8;
字符串类型
char: char(6),定长字符串类型。用空格补齐,会有存储空间的浪费,速度更快。如果数据原来右侧有空格,会丢失
varchar: 变长类型。 varchar(100)存储1-100个字符。不用空格补齐。但字段内容前面会有一或两个字节标识内容长度。
char(M),varchar(M)限制的是字符,不是字节。即char(2) charset utf8, 能存2个utf8字符.比如'中国',一个utf8字符3个字节。
text:大量的文本,搜索速度慢。存储文章内容,新闻内容。不用设置默认值
blob:二进制类型,用来存储图像、音频等信息。不用设置默认值。意义是防止由于字符集的问题导致数据丢失。
concat函数:用于连接字符串
select concat(ca,'!'),concat(vca,'!’) from test;
日期/时间类型
date:存储年-月-日 3个字节
birthday date not null default '0000-00-00'
time:存储 时时:分分:秒秒 3个字节
datetime:日期时间类型 年-月-日 时时:分分:秒秒 8个字节
year: 1个字节 范围1901-2155.也可以填0000,表示没有。
timestamp: 显示格式和datetime 一样。
建表和优化
把频繁用到的信息存储到一张表中,不常用的数据和占空间大的信息,优先考虑空间占用,存储到辅表。
建表就是声明列的过程。
create table 表名(
列名1 声明 列1参数,
列名2 声明 列2参数,
………………
列名n 声明 列n参数
)engine myisam/innodb/bdb charset utf8/gbk/latin
4 修改表的语法
表创建完成之后,可以增加、修改、删除列。
增加列:
alter table 表名 add 列名 列类型 列参数;
alter table 表名 add 列名 列类型 列参数 after 列名; 【把新的列添加到指定列的后面】
把列添加成表的第一列
alter table 表名 add 列名 列类型 列参数 first;
删除列
alter table 表名 drop 列名;
修改列
列名不变:
alter table 表名 modify 列名 新类型 新参数;
列名也修改:
alter table 表名 change 旧列名 新列名 新类型 新参数;