数据类型这里不再一一叙述,可参见这篇博客:
数据库常用命令:
1.启动MySQL服务器
net start mysql
2.断开Mysql服务器
net stop mysql
3.连接mysql服务器
格式: mysql -h 主机地址 -u 用户名 -p 用户密码
-P+端口号,mysql默认端口是3306,Oracal是1521,SQL Server是1433,Db2是5000
4.断开mysql服务器
quit
或者exit
或者\q
5.查询mysql中支持的存储引擎
show engines;
或者show variables like ‘have%’;
show engines得到结果中,字段 Support为:Default表示默认存储引擎 ,MySQL 默认引擎为InnoDB.
修改默认引擎:在配置文件my.cnf中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,重启mysql服务器
常见引擎:
InnoDB存储引擎:优势在于提供了良好的事务管理、崩溃修复能力和并发控制。缺点是其读写效率稍差,占用的数据空间相对较大。
MyISAM存储引擎:优势在于占用空间小,处理速度快,主要用于管理非事务表,它提供高速存储和检索,以及全文的搜索能力。缺点是不支持事务的完整性和并发性。
MEMORY存储引擎:优势在于出发点是速度,处理速度非常快,但数据易丢失,生命周期短,不支持varchar、blob和text数据类型。
6.数据库的操作
创建:create database 数据库名;
查看:show databases;
选择数据库:use 数据库名;
删除数据库:drop database 数据库名;
修改数据库编码:alter database 数据库名 CHARACTER SET utf8
查看当前数据库的编码:show variables like ‘character_set_database’;
修改数据库密码格式:mysqladmin -u用户名 -p旧密码 password 新密码
例:给root加个密码ab12。首先在DOS下进入目录mysql bin,然后键入以下命令:
mysqladmin -uroot -password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
例:再将root的密码改为djg345。
mysqladmin -uroot -pab12 password djg345
数据库的备份与恢复:
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。
数据库表的操作DDL(Data Definition Language)
1、创建表
create table 表名 (column_name column_type not null,…)
create table语句的属性说明属性说明属性说明column_name字段名Primary key该列是否为主码column_type字段类型AUTO_INCREMNT该列是否自动编号Not null | null该列是否允许为空
创建数据表后,“C:\AppServ\MySQL\data\数据库名\”中自动创建对应表文件(“表名.frm”,“表名.MYD”,“表名.MYI”)
2、查看数据库中的表
show tables;
3、查看数据库中所有的表
show tables;
4、查看数据表结构
describe 表名;
5、删除指定数据表
drop table 表名;
6、修改数据表结构
ALTER TABLE tabname ADD constraint PK_NAME PRIMARY KEY (colname) 说明:更改表得的定义把某个栏位设为主键,PK_NAME为主键的名字。
ALTER TABLE tab_name DROP PRIMARY KEY (col_name) 说明:把主键的定义删除
alter table tab_name add col_name varchar(20); //在tab_name表中增加一个名为col_name的字段且类型为varchar(20)
alter table tab_name drop col_name //在tab_name中将col_name字段删除
alter table tab_name modify col_name varchar(40) not null //修改字段属性,注若加上not null则要求原字段下没有数据SQL Server200下的写法是:Alter Table table_name Alter Column col_name varchar(30) not null;
如何修改表名:alter table tab_name rename to new_tab_name
如何修改字段名:alter table tab_name change old_col new_col varchar(40); //必须为当前字段指定数据类型等属性,否则不能修改
create table new_tab_name like old_tab_name //用一个已存在的表来建新表,但不包含旧表的数据
数据操纵语言DML( Data Manipulation Language)
删除表中数据命令:delete from 表名 where 表达式
修改表中数据:update 表名 set 字段=新值,… where 条件
插入数据:insert into [( [,.. ])] values ( 值1 )[, ( 值n )]
例:INSERT INTO table_name (id, username, password, time, number, content) VALUES (, abc, 123456,2007-08-06 14:32:12, 23.41, hello world);
数据控制语言DCL(Data Control Language)
一个项目创建一个用户,一个项目对应的数据库只有一个。
这个用户只能对这个数据库有权限,其他数据库你就操作不了。
1.创建用户
create user 用户名@ip地址 identified BY ‘密码’
用户只能在指定的ip地址上登录
create user 用户名@’%’ identified BY ‘密码’
用户只能在任意ip地址上登录
2.给用户授权
grant 权限1,权限2….权限n on 数据库.* to 用户名@ip地址
给用户分配指定数据库上的指定权限
权限处可以填:create,alter,drop,insert,updata 等
其中grant all on 数据库.* to 用户名@ip地址 表名给用户分派指定数据库上打所有权限
3.撤销授权
remove 权限1,权限2….权限n on 数据库.* to 用户名@ip地址
撤销指定权限
4.查看权限
show grants for 用户名@ip地址
5.删除用户
drop user 用户名@ip地址
6.查看授予了哪些用户权限
SELECT DISTINCT CONCAT(‘User: ”’,user,”’@”’,host,”’;’) AS query FROM mysql.user;
可以显示授权了哪些用户
数据查询语言DQL(Data Query Language SELECT )
1.查询所有列
select * from 表名;
2.查询指定列
select username,userAccout from 表名;
3.完全重复的记录只输出一次
使用关键字distinct
select distinct * from table_name;
4.转换null值
有时需要把null转换成其他值,例如输出salary时,当salary为空时,应当为0
使用关键字ifnull
select ifnull(salary,0) from table_name;
5.别名as(可以省略)
当使用列运算时,查询出的结果集中的列名称不好看,这时候需要用到别名
使用
例如select concat(‘我叫’,username,’我的爱好是’,hobby) as 个人介绍 from table_name;
6.条件查询
使用where关键字
模糊查询:使用 like关键字
使用in关键字查询id是1或者2的用户信息:select * from table_name where id in(‘1′,’2’);
7.排序
使用关键字order by进行排序,默认为升序,asc是升序,desc是降序
select * from table_name order by id asc;
多列排序:例如当成绩相同时,学号id小的排在前面
select * from student order by score desc,id asc;
8.聚合函数查询
count函数:计算不为空的记录条数,即有效行数
例如 select count(*) from table_name;//查询所有记录条数,除非某条记录值全为null,才会不计入
select count(id) from table_name;//查询id不为空的记录总数
select count(2) from table_name;//查询第二列不为空的记录总数
max函数:查询该列最大值
select max(salary) from table_name;
min函数:查询该列最小值
select min(salary) from table_name;
avg函数:查询平均值
select avg(salary)平均,max(salary)最高工资 from table_name;
sum函数:查询该列值相加总和
9.分组查询
使用关键字group by,使用分组查询时,select后的语句只能是分组依据信息或者聚合函数
select sex,count(*) from table_name group by sex;
10.having关键字
having关键字是用来筛选分组条件的,而where是筛选记录的
select salary from table_name group by salary having salary>2000;
用having就一定要和group by连用,
用group by不一有having (它只是一个筛选条件用的)
11.limit子句
limit用来限定查询结果的起始行,以及总行数
select * from table_name limit 2,3 ;表示查询从第3行开始,一共查询3行
select * from table_name limit 0,4 ;表示查询从第1行开始,一共查询4行
语句书写规范:
select
from
where
group by
having
order by