首页 > 代码库 > MySql入门
MySql入门
一、数据库入门
-------存放数据的仓库【和集合类似】,并有一定的规则结构
一】SQL=Structure Query Language 【结构化的查询语言】
SQL是客户端操作数据库的一种工具/命令,主要以存取为主
二】各种常用数据库简介
Oracle/Java
SQLServler/Microsoft
DB2/IBM
Linux+Apache+MySQL+PHP(最适合的配置)
三】SQL[通用/特定]与数据库的关系
1)每种关系型数据库都支持的SQL命令,叫做通用SQL。
2)每种关系型数据库都根据自身数据库的特点,量身定做的SQL,叫做特定SQL。
四】登录与退出
1)登录MySQL:>mysql -u root -p
>******
2)退出MySQL:>exit
二、数据库操作
一】数据库服务器、数据库和表以及记录的关系
见图。
二】Java对象世界和SQL关系世界的关系
类User <===> 表USER
对象user<===> 记录(行)
属性 <===> 字段(列)
三】操作数据库(SQL命令大小写无关。)
1)创建数据库:
create database [if not exists] 【数据库名】[character set 【字符集】[collate utf8_general_ci]];//[]中的内容为可选的
可选参数:
if not exists :如果不存在则创建,如果存在就不创建此数据库。
character set 【字符集】:指定此数据库采用的字符集。
collate 【字符校验规则】:和字符集一一对应,show character set;命令可以查看。
code:
create database mydb1;//创建数据库mydb1
create database mydb2 character set UTF8;//创建数据库mydb2并设置字符集为UTF8
create database if not exists mydb3 characater set UTF8 collate utf8_general_ci;//创建一个使用utf8字符集,并带校对规则的mydb3数据库。
2)显示数据库语句
show databases;//查看当前数据库服务器中的所有数据库。
code:
3)使用数据库
use db_names;
4)删除数据库
drop database [if exists] db_name;
5)查看前面创建的数据库的定义信息
show create database db_name;
四】修改、备份、恢复数据库
1)修改数据库:
---只能修改字符集和字符校验规则。
alter database db_name [character set 【字符集】 collate 【字符校验规则】]
alter database mydb3 character set gbk;//将mydb3库的字符集修改为gbk
2)备份数据库:【mySQL特有命令】
=(备份到的文件)
*********(密码)
注意:
1》该命令是mySQL特有命令
2》在>中执行,并非mysql>环境中使用。
3》结尾可以不用加分号表示结束
3)恢复数据库【mySQL特有命令】
source 【本分文件路径】;
code:
source d:\mydb2.sql;
注意:
1》该命令是mySQL特有命令
2》在mysql>环境中使用
3》结尾需要加分号表示结束
五】表
1)创建表
create table table_name
(
filed1 datatype,
filed2 datatype,
filed3 datatype
)[character set 【字符集】 collate 【校对规则】];
filed:指定列名
datatype:指定列类型
code:
创建一张表,含有id/name/password/birthday字段
create table user(
id int,
name varchar(20),
password varchar(6),
birthday date
);
注意:
1》创建表前要使用use dbname语句指明使用的数据库。
2)修改表的列
1》追加列
alter table 【表名】
add 【列名】 datatype [default 默认值][,【列名】 datatype [default 默认值]];
2》修改列
alter table 【表名】
modify 【列名】 datatype [default 默认值] [,【列名】 datatype [default 默认值]];
3》删除列
alter table 【表名】
drop 【列名】;
3)修改表的名称
rename table 【原表名】 to 【新表名】;
4)修改表的字符集
alter table 【表名】 character set 【字符集】;
5)删除表
drop table [if exists] table_name;
6)修改列名(其功能还包括修改列数据)
alter table user
change column 【原列名】 【新列名】 datatype;
code:
修改列名name为username:
alter table user
change column name username varchar(20);
7)其它:
查看表的描述结构
desc 【表名】;
显示数据库中所有的表
show tables;
显示表的创建信息
show create table 【表名】;
三、MySQL常用数据类型
一】时间日期
1)date
格式为:‘2011-10-23‘
code:
create table user(
id int,
name varchar(20),
password varchar(6),
birthday date
);
insert into user(id,name,password,date) values(1,‘jack‘,‘568231252‘,‘2011-10-23‘);
2)datetime
格式为:‘2011-10-23 17:17:17‘
code:
create table user(
id int,
name varchar(20),
password varchar(6),
birthday datetime
);
inser into user(id,name,password,date) values(1,‘jack‘,‘568231252‘,‘2011-10-23 17:17:17‘);
3)timestamp(登录时间)【翻译:时间戳】
没有设置时间的时候数据库会默认自动加上当前的系统时间。
create table user(
id int,
name varchar(20),
password varchar(6),
birthday timestamp
);
code:
·date类型:
create table date(
birthday date
);
show tables;
desc date;
insert into date(birthday) values(‘2011-3-21‘);
desc date;
select * from date;
·datetime类型:
create table datetime(
birthday datetime
);
show tables;
desc datetime;
select * from datetime;
insert into datetime(birthday) values(‘1992-09-12 01:34:25‘);
desc datetime;
select * from datetime;
·timestamp(时间戳)
create table timestamp(
id int,
birthday timestamp
);
show tables;
desc timestamp;
二】字符类型
char(size) 固定长度
varchar(size) 可变长度(自动节省空间)
注意:
size最大为65536.
三】text文本数据类型和bolob二进制数据类型 (比varchar更长的类型)
tinytext/text/mediumtext/longtext --> 255B/64K/16M/4G大小的文本数据。
tinyblob/blob/mediumblob/longblob --> 255B/64K/16M/4G大小的图片/音乐等二进制数据
code:
create table user(
bz text,
photo blob,
mp3 blob
);
四】数值类型
1)bit(M):位,M为1~64
2)int类型 【有无符号(默认)和有符号之分】
tinyint[(N)] [unsigned] [zerofill] 1个字节
smallint[(N)] [unsigned] [zerofill] 2个字节
mediumint[(N)] [unsigned] [zerofill] 3个字节
int[(N)] [unsigned] [zerofill] 4个字节
bigint[(N)] [unsigned] [zerofill] 8个字节
注意:
N相当于C语言中的字节对齐。eg:5 表示数据占5位,且右对齐;若实际数据超过5位也完全显示输出,不会截断。
code:
create table user(
id int(5)
);
inser into user(id) values(99999);//ok的
3)float类型
float[(m,d)][unsigned][zerofill]
m:代表显示的长度(不包括小数点,截取后的数据不允许超过长度)
d:指定小数的位数(截取的时候会四舍五入)
code:
create table user(
salary float(6,2)
);
insert into user(salary) values(1234.12);
insert into user(salary) values(1234.123);//1234.12
insert into user(salary) values(1234.125);//1234.13
insert into user(salary) values(123445.12);//errror
注意:
1》定界符使用‘‘或者"",但部分数据库不支持"",优先推荐‘‘作为定界符。
2》对于日期类型,MySQL数据库有一定的判断功能,写入‘2011-10-32‘就会错误
3》MySQL分为两类:
MyISAM数据库引擎(非关系型数据库):不支持表与表之间的查询,但查询速度快。
InnoDB数据库引擎(关系型数据库):支持表与表、支持事务安全,但查询速度稍慢。
四、MySQL中中文的编码问题
思路:通过设置数据库对于各部分的编码方式来进行,而windows
平台下的的编码方式为gbk/gb2312,所有有关部分设置为gbk/gb2312即可。
一】暂时修改
1》show variables like ‘character%‘;//查看当前数据库对于各个部分的编码方式
2》set character_set_results=gbk;//设置输出到客户端的编码方式为gbk.
3》set character_set_client=gbk;// 设置客户端输入的编码方式为gbk.
4》set character_set_connection=gbk;//设置连接的编码为gbk
注意:
1》再次进入后,查看结果则会出现乱码,即上次的设置是暂时的
二】长久修改
修改配置文件:my.ini.
修改客户端的缺省编码方式为下列值
default-character-set=gbk或gb2312
注意:此种方法需要重新启动MySQL服务。
五、数据库的CRUD语句
一】Insert语句
格式:
INSERT INTO 【表名】 [(column [, column...])]
VALUES (value [, value...]);
code:
insert into user values(value1, value2...);//此种方式必须符合表的默认格式
insert into user(id,username,salary,image) values(5,‘马利‘,10000.123,null); //此种方式必须符合前面括号内的列的格式
注意:
插入空值,不指定或者insert into table value(null)
二】update语句
UPDATE tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
code:
update user
set salary= 6000
where username=‘马利‘;
//将jack的薪水在原有基础上增加1K
update user
set salary=salary+1000
where username=‘jack‘;
三】delete from语句/truncate table
delete from tab_name
[WHERE where_definition]
1>删除表中名称为‘jack‘的记录
delete from user where username=‘jack‘;
2>删除所有记录
delete from user;
3>使用truncate删除表中记录
truncate table user;
总结:删除表的记录的方法
1》delete from
按行删除表中的记录,但是会保留表结构和表本身。
适合删除数据量不大的数据。
code:
delete from user
where username=‘jack‘;
2》truncate table
复制原表结构-->一次性删除整个表-->自动按照原表结构再创建一个空表
适合删除数据量较大的数据,不能按条件删除一行数据。
code:
truncate table user;
3》drop table
删除表本身
code:
drop table user;
注意:删除记录的时候,一定要注意表之间的关联关系。
四】查询
1》
SELECT [DISTINCT] *|{column1|expression, column2|expression,..}
FROM table
where 【条件】;
参数:
column指定列名。
*号代表查询所有列。
From指定查询哪张表。
expression:表达式
DISTINCT可选,指显示结果时,是否剔除重复数据
2》SELECT column as 【列名别名】 from 【表名】;
code:
select name as 姓名,math+10 as 数学 from student;
五、where过滤器
出现在from后面,where是按行筛选。
1》比较运算符
between ...and... 显示某一区间的值
in(set) 在set集合中的值
like ‘关键字pattern‘ 模糊查询 【%:零个或多个任意字符,_:一个任意字符;】
is null / is not null 是否为空
2》逻辑运算符
and/&& 多个条件同时成立
or/|| 多个条件任一成立
not/! 不成立
详见ppt。
六、排序子句
格式:
SELECT column1, column2. column3..
FROM table
order by column asc|desc;
1》升序
order by 【列名|表达式】[as 【别名】] asc;
或者
order by 【列名|表达式】[as 【别名】];
2》降序
order by 【列名|表达式】 [as 【别名】]desc;
注:
1》NULL值为最小。
2》默认为升序。
3》升序:asc.降序:desc.
4》order by语句必须放在最后。
七、函数
统计某列中的某行数据,若为*,取最大值。
一】合计函数——count()
Select count(*)|count(列名) from tablename
[WHERE where_definition]
注意:
1》Count(列名)返回某一列,行的总数
2》不统计NULL
二】合计函数——sum()
Select sum(列名)
from tablename
[WHERE where_definition]
注意:
1》Count(列名)返回某一列中行的总值
2》统计非数值类型,返回0,无意义。
三】平均函数-avg()
Select avg(列名){,avg(列名)…}
from tablename
[WHERE where_definition]
注意:
AVG函数返回满足where条件的一列的平均值
code:
select avg(chinese+math+length)
from student;
四】最大和最小函数-max()和min()
1》最大值
Select max(列名)
from tablename
[WHERE where_definition]
2》最小值
Select min(列名)
from tablename
[WHERE where_definition]
注意:
1》可以对字符类型进行取值。根据码表。
2》可以对date类型进行取值。max:最大日期。min:最小日期。
注意:在网站中,多条件查询中用到
select *
from student
where name like ‘%%‘;
注意:这些函数常常于group by子句进行联用,其值则是对分组后每行中合并的列进行求值而得。
eg:
五】group by 子句
作用:对表中内容按照列的类别进行分组
格式:
SELECT column1, column2. column3..
FROM table;
group by column
六】having 子句
作用:过滤.
SELECT column1, column2. column3..
FROM table;
group by column
having ...
注意:where和having的区别:
1》where:主要用于行过滤器
2》having主要用于类别过滤器,通过用于group by后,
having可以使用合计函数。
补充:#是sql的注释语句。
MySql入门