学了这么久的mysql,是应该总结一下了!
什么是mysql呢?
一个关系型数据库,数据库服务器为我们提供数据存储服务
常用的数据库服务器:
商业:oracle, SQLserver,DB2
开源:MySQL,postgreSQL,SQLite
到目前为止接触比较多的是mysql,oracle和sqlite(主要是一个小型数据库,因为小可移植性就比较好,因此多用于嵌入式系统中)
其中,MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。
目前 MySQL被广泛地应用在Internet上的中小型网站中。
由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,
许多中小型网站为了降低网 站总体拥有成本而选择了MySQL作为网站数据库。
(1)安装mysql
在window下安装mysql
step1:运行mysql.....msi
step2:next next ....
step3:配置服务,将mysql的bin加入path
step4:初始化root密码mysql
step5:net stop mysql
step6:找到my.ini 改两处编码为gbk
step7:修改mysql 数据目录
将原目录下的文件复制到新目录下
然后才改my.ini中的datadir
step8:net stop mysql
net start mysql
一般比较傻瓜式的安装
5 权限不够
whoami
net user administrator /active:yes
net stop mysql
net start mysql
常用的一些数据库命令:
登陆mysql
mysql>mysql -uroot -pmysql
mysql>mysql -h192.168.149.138 -uroot -pmysql -P3306
mysql>\q 退出
show databases;查看mysql服务器管理多少数据库
create database citest;创建数据库
show databases;查看mysql服务器管理多少数据库
use cissst;选择数据
show tables;查看数据库下有多少表
select database();查看当前选择的数据库
select user();查看当前用户
select @@datadir;查看mysql数据库目
select @@basedir:查看mysql安装位置
mysql帮助的用法:
? contents;
先总体看一下,后边细细说
创建表:
create table dep(id int not null auto_increment primary key,name varchar(25));
create table emp(
id int not null auto_increment primary key,
dep_id int,
name varchar(25),
age int(3) default 18,
sex enum('M','F') default 'M',
CONSTRAINT fk_emp_01 FOREIGN KEY(dep_id)REFERENCES dep(id)
);
查看表结构:
desc dep;
查看创建表语句:
mysql> show create table dep \G
1. row
Table: dep
Create Table: CREATE TABLE dep
(id
int(11) NOT NULL AUTO_INCREMENT,name
varchar(25) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.00 sec)
mysql> show create table emp \G
1. row
Table: emp
Create Table: CREATE TABLE emp
(id
int(11) NOT NULL AUTO_INCREMENT,dep_id
int(11) DEFAULT NULL,name
varchar(25) DEFAULT NULL,age
int(3) DEFAULT '18',sex
enum('M','F') DEFAULT 'M',
PRIMARY KEY (id
),
KEY fk_emp_01
(dep_id
),
CONSTRAINT fk_emp_01
FOREIGN KEY (dep_id
) REFERENCES dep
(id
)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.00 sec)
对表结构的操作:ddL
create table stu(id int not null auto_increment primary key,name varchar(25),age int(3) default 22,sex enum('m','f'),birth date);
增加列
alter table stu add pro varchar(23) after age;
alter table stu add pro varchar(23) frist;
alter table stu add pro varchar(23);
修改列:
alter table stu modify pro int default 3;
对列重命名:
alter table stu change pro prof varchar(3) default 'art';
删除列:
alter table stu drop prof;
对表重命名:
alter table stu rename to student;
drop table stu;删除表
drop database db_name;删除数据库
DML:
insert into student(name,age,sex,birth) values('zhangsan',18,'m',now());
insert into student set name='lisi',age=22,sex='F',birth='1987-12-2';
update student set name='lisi',age=22,sex='F',birth='1987-12-2' where id=3;
insert into student values(null,'wangwu',24,'m','1983-01-02'),(null,'lida',26,'f','1984-03-04');
update student name='lisa' where id=4;
delete from student where id=4;
select * from student;
alter table stu2 modify id int not null auto_increment primary key;
insert into stu2(name,age,sex,birth) select name,age,sex,birth from stu2;
看了这么多,用什么感觉,其实数据库真正的东西无非就这些增删改查,再加一些数据库维护的东西罢了,你也许会反驳我,但这儿只是入门用的
语法不是重点,但总结一下
1.
创建表:
create table tbName (
列名称1 列类型 [列参数] [not null default ],
....列2...
....
列名称N 列类型 [列参数] [not null default ]
)engine myisam/innodb charset utf8/gbk
例子:
create table user (
id int auto_increment,
name varchar(20) not null default '',
age tinyint unsigned not null default 0,
index id (id)
)engine=innodb charset=utf8;
注:innodb是表引擎,也可以是myisam或其他,但最常用的是myisam和innodb,
charset 常用的有utf8,gbk;
还有另外几种:
create table stu1 like student;创建stu1表
create table stu2 select * from student;
2)
修改表
1 修改表之增加列:
alter table tbName
add 列名称1 列类型 [列参数] [not null default ] #(add之后的旧列名之后的语法和创建表时的列声明一样)
2 修改表之修改列
alter table tbName
change 旧列名 新列名 列类型 [列参数] [not null default ]
(注:旧列名之后的语法和创建表时的列声明一样)
3 修改表之减少列:
alter table tbName
drop 列名称;
4 修改表之增加主键
alter table tbName add primary key(主键所在列名);
例:alter table goods add primary key(id)
该例是把主键建立在id列上
5 修改表之删除主键
alter table tbName drop primary key;
6 修改表之增加索引
alter table tbName add [unique|fulltext] index 索引名(列名);
7 修改表之删除索引
alter table tbName drop index 索引名;
8 清空表的数据
truncate tableName;
3)
列类型:
整型:tinyint (0~255/-128~127) smallint (0~65535/-32768~32767) mediumint int bigint (参考手册11.2)
参数解释:
unsigned 无符号(不能为负) zerofill 0填充 M 填充后的宽度
举例:tinyint unsigned;
tinyint(6) zerofill;
数值型
浮点型:float double
格式:float(M,D) unsigned\zerofill;
字符型
char(m) 定长
varchar(m)变长
text
列 实存字符i 实占空间 利用率
char(M) 0<=i<=M M i/m<=100%
varchar(M) 0<=i<=M i+1,2 i/i+1/2<100%
year YYYY 范围:1901~2155. 可输入值2位和4位(如98,2012)
日期时间类型 date YYYY-MM-DD 如:2010-03-14
time HH:MM:SS 如:19:26:32
datetime YYYY-MM-DD HH:MM:SS 如:2010-03-14 19:26:32
timestamp YYYY-MM-DD HH:MM:SS 特性:不用赋值,该列会为自己赋当前的具体时间
4)
增删改查基本操作
1 插入数据
insert into 表名(col1,col2,……) values(val1,val2……); -- 插入指定列
insert into 表名 values (,,,,); -- 插入所有列
insert into 表名 values -- 一次插入多行
(val1,val2……),
(val1,val2……),
(val1,val2……);
3修改数据
update tablename
set
col1=newval1,
col2=newval2,
...
...
colN=newvalN
where 条件;
4,删除数据 delete from tablenaeme where 条件;
5, select 查询
(1) 条件查询 where a. 条件表达式的意义,表达式为真,则该行取出
b. 比较运算符 = ,!=,< > <= >=
c. like , not like ('%'匹配任意多个字符,'_'匹配任意单个字符)
in , not in , between and
d. is null , is not null
(2) 分组 group by
一般要配合5个聚合函数使用:max,min,sum,avg,count
(3) 筛选 having
(4) 排序 order by
(5) 限制 limit
5)
连接查询
1
左连接
.. left join .. on
table A left join table B on tableA.col1 = tableB.col2 ;
例句:
select 列名 from table A left join table B on tableA.col1 = tableB.col2
- 右链接: right join
- 内连接: inner join
左右连接都是以在左边的表的数据为准,沿着左表查右表.
内连接是以两张表都有的共同部分数据为准,也就是左右连接的数据之交集.
6)
子查询
where 型子查询:内层sql的返回值在where后作为条件表达式的一部分
例句: select * from tableA where colA = (select colB from tableB where ...);
from 型子查询:内层sql查询结果,作为一张表,供外层的sql语句再次查询
例句:select from (select from ...) as tableName where ....
7)
字符集
客服端sql编码 character_set_client
服务器转化后的sql编码 character_set_connection
服务器返回给客户端的结果集编码 character_set_results
快速把以上3个变量设为相同值: set names 字符集
存储引擎 engine=1\2
1 Myisam 速度快 不支持事务 回滚
2 Innodb 速度慢 支持事务,回滚
①开启事务 start transaction
②运行sql;
③提交,同时生效\回滚 commit\rollback
触发器 trigger
监视地点:表
监视行为:增 删 改
触发时间:after\before
触发事件:增 删 改
创建触发器语法
create trigger tgName
after/before insert/delete/update
on tableName
for each row
sql; -- 触发语句
删除触发器:drop trigger tgName;
索引
提高查询速度,但是降低了增删改的速度,所以使用索引时,要综合考虑.
索引不是越多越好,一般我们在常出现于条件表达式中的列加索引.
值越分散的列,索引的效果越好
索引类型
primary key主键索引
index 普通索引
unique index 唯一性索引
fulltext index 全文索引
转载于:https://blog.51cto.com/13375232/2057520