学了这么久的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 2. 右链接: right join 3. 内连接: inner join

左右连接都是以在左边的表的数据为准,沿着左表查右表. 内连接是以两张表都有的共同部分数据为准,也就是左右连接的数据之交集.

子查询 where 型子查询:内层sql的返回值在where后作为条件表达式的一部分 例句: select * from tableA where colA = (select colB from tableB where ...);

from 型子查询:内层sql查询结果,作为一张表,供外层的sql语句再次查询 例句:select * from (select * from ...) as tableName where ....

字符集 客服端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 全文索引