1 mysql的相关命令
启动服务: net start mysql
关闭服务: net stop mysql
启动和关闭服务需要在管理员身份运行终端
登录时报10061错误时,说明服务为启动
查看mysql版本: mysql --version
登陆mysql: 两种常见的方式:1. mysql -uroot -p(密码)
2. mysql -uroot -p 回车
输出框提示:password:
后者密码隐藏输入,前者暴露
远程登陆数据库: mysql –hip地址 -P3306 –uroot –p //主机名 端口号 用户名 密码
显示所有数据库: show databases;
选定数据库: use 数据库名称;
显示当前数据库中所有的表: show tables;
显式指定数据库中的所有表: show tables from 数据库名称;
显示命令清单: \h
显示mysql状态信息: status
退出mysql: 三种方式:1. exit 2. quit 3.\q
2 sql语句规范
sql语句无大小写之分,但是我们习惯用大写表示其关键字,小写表示标识符
SQL(Structured Query Language)
DDL(Data Definition Language数据定义语言):用于创建数据库,数据库对象,定义其列
常见命令:CREATE、DORP、ALTER
DCL(Data Control Language数据控制语言):用来控制存储许可,存储权限等
常见命令:GRANT,REVOKE等
DML(Data Manipulation Language数据操作语言):查询,插入,删除,修改数据库中的数据
常见命令:SELECT,INSERT,UPDATE,DELETE
创建数据库
- create database dbname [数据库选项]; //创建数据库
注意:数据库的名称可以是中文的,有些特殊的名称需要加上· ·,如·123·,
- show create database dbname; //查看创建数据库的SQL语句
- alter database dbname character set gbk //更改字符集
- create user username identified by ‘123456’;//创建数据库 密码为123456
- drop user username ;//删除用户,select user(); //查看当前用户
- grant select,insert,update,delete on . to username @’%’ identified by ‘123456’;//创建具有权限的用户
- grant all privileges on . to [email protected]’%’;//赋予权限 ,但没有Grant_priv权限
- revoke all privileges on . from [email protected]’%’ ;//回收权限
- SET PASSWORD FOR ‘root’@‘localhost’ = PASSWORD(‘newpass’);//修改密码
- mysqladmin -u root -poldpass password newpass
- mysqladmin -uabc -p123456 password 123(要有权限才可以修改)
表操作
use student; //使用数据库
- create table t_emp(empno int, ename varchar(20), esex char(2));//在数据库study中新建表t_emp;
- 对表列进行修改
alter table t_emp modify ename varchar(30);
alter table t_emp drop esex;
alter table t_emp add esex char(2); - 插入数据
insert into t_emp(empno, ename, esex) values(1000, ‘tom’, ‘m’);
insert into t_emp values(1000, ‘maggie’, ‘f’);
insert into t_emp(empno, ename) values(1002, ‘john’);
insert into t_emp(empno, ename, esex) values(1003, null, ‘m’);
insert into t_emp values(1004, ‘张三’, ‘男’); - 显示字符集
show variables like ‘character_set%’; - 修改字符集
set names gbk; - 删除表中某一项
delete from t_emp where esex is null; - 删除表中所有结构
delete from t_emp; - 显示表结构
desc table; - 查找表
select * from table; - 删除表
drop table tablename ;
完整性约束
**主键:**约束表,插入表时必须有此元素,为主键的列不能重复
一个表中只能有一个主键或者一个复合主键
创建有主键的表:
- create table t_emp(empno int not null primary key, ename varchar(20), esex char(2));
- create table t_emp(empno int, ename varchar(20), esex char(2), primary key (empno,ename)); //复合主键
外键:
。。。。。
自定义完整性约束:
- create table t_test1(id int auto_increment primary key, name varchar(30), age int default 20);//auto_increment必须是primary key
3 数据类型
数值:
- 4种整数类型的字节大小和作用范围
zerofill 指定最小的宽度不足为零
unsigned 表示无符号
例子:
create table t_number(a tinyint, b tinyint unsigned);
insert into t_number values(100, 200); //正常a(-128到127) b(0到256)
insert into t_number values(-129, 200); //报错,越界
insert into t_number values(128, 200); //报错,越界
insert into t_number values(127, 200);//正常
insert into t_number values(127, -1);//报错,越界
- 浮点数表示:
S:符号位
E: 指数位
M:尾数位
单精度4个字节,32位,取值范围-3.402823466E+38~3.402823466E 精度6位
双精度8个字节,64位,取值范围-1.7976931348623157E+308~1.7976931348623157E+308 精度17位
DOUBLE[(M,D) ] [UNSIGNED] [ZEROFILL]
M总位数,D是小数点后面的位数
DECIMAL[(M,D])] [UNSIGNED] [ZEROFILL]
M缺省是10,D缺省是0
decimal取值范围与double是一样的,但是有更高的精度。numeric是decimal的别名
例子:
create table t_number4(a float, b double);
insert into t_number4 values(12345678.12345, 12345678.12345);
insert into t_number4 values(12345678.12345, 123456789123456789.12345);
insert into t_number4 values(12345678.12345, 12345678912345.12345);
日期和时间类型:例子:
create table t_datetime(a datetime);
insert into t_datetime values(‘2014-01-15 10:10:10’);
insert into t_datetime values(‘9999-12-31 23:59:59’);
insert into t_datetime values(‘99-01-01 00:00:00’); //70-99 补上19
insert into t_datetime values(‘69-01-01 00:00:00’); //00到69补上20
create table t_timestamp(a timestamp);
insert into t_timestamp values(‘2014-01-15 10:10:10’);
insert into t_timestamp values(‘2038-01-19 03:14:07’);
insert into t_timestamp values(‘2038-01-19 03:14:08’);//能够插入 与时区有关
insert into t_timestamp values(‘2038-01-19 11:14:07’);
insert into t_timestamp values(‘2038-01-19 11:14:08’);//不能够插入
create table t_date(a date);
insert into t_date values(‘2012-01-01’);
create table t_time(a time);
insert into t_time values(‘23:12:12’);
insert into t_time values(‘823:12:12’);
insert into t_time values(‘3 23:12:12’);
create table t_year(a year);
insert into t_year values (2000);
insert into t_year values (‘2155’);
insert into t_year values (2156);
字符串类型:
char(M) 与varchar(M) – M表示字符数
- CHAR列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。
- VARCHAR列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)
binary(M)与varbinary(M)
BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值
- VARCHAR、BLOB和TEXT类是变长类型。每个类型的存储需求取决于列值的实际长度(用前面的表中的L表示),而不是该类型的最大可能的大小。例如,VARCHAR(10)列可以容纳最大长度为10的字符串。实际存储需求是字符串(L)的长度,加上一个记录字符串长度的字节。对于字符串’abcd’,L是4,存储需要5个字节。
- 对于CHAR、VARCHAR和TEXT类型,前面的表中的值L和M应解释为字符数目,并且列定义中的这些类型的长度表示字符数目。例如,要想保存一个TINYTEXT值需要L字符+ 1个字节
例子:
create table t_enum(sex enum(‘male’, ‘female’));
insert into t_enum values(‘male’);
insert into t_enum values(‘female’);
insert into t_enum values(‘other’);
insert into t_enum values(1);
select sex+0 from t_enum;
create table t_set(favourite set(‘dog’, ‘cat’, ‘bird’)); //按位存储
insert into t_set values(‘dog,cat’); //3
insert into t_set values(‘dog,bird’); //5
select favourite+0 from t_set;