进入mysql安装目录
./mysql.server start; //启动服务
./mysql.server stop; //关闭服务
添加到MySQL 添加到server 服务中后可以直接运行
service mysql start; 启动
service mysql stop; 停止
查看mysql服务进程:ps -ef | grep mysql
service服务管理:cp -a mysql.server /etc/rc.d/init.d/mysql
启动命令:service mysql start
关闭命令:service mysql stop
重新启动命令:service mysql restart
查看状态命令:service mysql status
登录管理: ln -s /usr/local/mysql/bin/* /bin
登录命令:mysql -uroot -p
默认端口号:3306
配置文件:/etc/my.cnf
命令行模式:
登录命令:mysql -u用户 -p密码
退出命令:exit; quit;
1. DDL 数据定义语言 (Data Definition Language) 例如:建库,建表
2. DML 数据操纵语言(Data Manipulation Language) 例如:对表中的数据进行增删改操作
3. DQL 数据查询语言(Data Query Language) 例如:对数据进行查询
4. DCL 数据控制语言(Data Control Language) 例如:对用户的权限进行设置
create database if not exists 数据库名;
create database 数据库名 default character set 字符集名;
show create database 数据库名;
show variables like 'character%';
<1>整数型
类型 大小 范围(有符号) 范围(无符号unsigned) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32768,32767) (0,65535) 大整数值
MEDIUMINT 3 字节 (-8388608,8388607) (0,16777215) 大整数值
INT 4 字节 (-2147483648,2147483647) (0,4294967295) 大整数值
BIGINT 8 字节 () (0,2的64次方减1) 极大整数值
<2>浮点型
FLOAT(m,d) 4 字节 单精度浮点型 备注:m代表总个数,d代表小数位个数
DOUBLE(m,d) 8 字节 双精度浮点型 备注:m代表总个数,d代表小数位个数
<3>定点型*
DECIMAL(m,d) 依赖于M和D的值 备注:m代表总个数,d代表小数位个数
<4>字符串类型
类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535字节 变长字符串
TINYTEXT 0-255字节 短文本字符串
TEXT 0-65535字节 长文本数据
MEDIUMTEXT 0-16777215字节 中等长度文本数据
LONGTEXT 0-4294967295字节 极大文本数据
char 的优缺点:存取速度比varchar更快,但是比varchar更占用空间
varchar 的优缺点:比char省空间。但是存取速度没有char快
<5>时间型
数据类型 字节数 格式 备注
date 3 yyyy-MM-dd 存储日期值
time 3 HH:mm:ss 存储时分秒
year 1 yyyy 存储年
datetime 8 yyyy-MM-dd HH:mm:ss 存储日期+时间
timestamp 4 yyyy-MM-dd HH:mm:ss 存储日期+时间,可作时间戳
创建表田添加约束语法:
CREATE TABLE 表名 (
字段名1 字段类型1 约束条件1 约束条件2 约束条件3 说明1,
字段名2 字段类型2 约束条件2 说明2,
字段名3 字段类型3 约束条件3 说明3
);
复制表结构:不含数据
create table 新表名 as select * from 旧表名 where 1=2;(注意:建议这种创建表的方式用于日常测试,
因 为可能索引什么的会复制不过来)
where 1=2 :作用是只复制表结构,并不复制数据,不加的话会复制所有数据(生产备份环境用的)
create table 新表名 like 旧表名; :MySQL常用复制表
删除表:
drop table 表名;
约束条件:
comment ----说明解释
not null ----不为空
default ----默认值
unsigned ----无符号(即正数)
auto_increment ----自增
zerofill ----自动填充
unique key ----唯一值
创建sql
CREATE TABLE student (
id tinyint(5) zerofill auto_increment not null comment '学生学号',
name varchar(20) default null comment '学生姓名',
age tinyint default null comment '学生年龄',
class varchar(20) default null comment '学生班级',
sex char(5) not null comment '学生性别',
unique key (id)
)engine=innodb charset=utf8;;
CREATE TABLE student (
id tinyint(5) auto_increment default null comment '学生学号',
name varchar(20) default null comment '学生姓名',
age tinyint default null comment '学生年龄',
class varchar(20) default null comment '学生班级',
sex char(5) not null comment '学生性别',
unique key (id)
)engine=innodb charset=utf8;;
扩展:
engine=innodb 作用:存储引擎是innodb。innoDB 是 MySQL 上第一个提供外键约束的数据存储引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘的关系数据库引擎中最有效率的。
InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 有它自己的缓冲池,能缓冲数据和索引,InnoDB 还把数据和索引存放在表空间里面,可能包含好几个文件,这和 MyISAM 表完全不同,在 MyISAM 中,表被存放在单独的文件中,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB
rename table 旧表名 to 新表名;
rename table student to user;
给表添加一列:
alter table 表名 add 列名 类型;
alter table user add addr varchar(50);
alter table add 列名 类型 comment '说明';
*alter table user add famliy varchar(50) comment '学生父母';
给表最前面添加一列:
alter table 表名 add 列名 类型 first;
alter table user add job varchar(10) first;
给表某个字段后添加一列:
alter table 表名 add 列名 类型 after 字段名;
alter table user add servnumber int(11) after id;
注意:没有给表某个字段前添加一列的说法。
alter table 表名 modify 列名 新类型;
alter table user modify servnumber varchar(20);
alter table 表名 change 旧列名 新列名 类型;
alter table user change servnumber telephone varchar(20);
alter table 表名 drop 列名;
alter table user drop famliy;
alter table 表名 character set 字符集;
alter table user character set GBK;
drop table 表名;
drop table user;
drop table if exists 表名;
drop table if exists teacher; 没有也不报错
*insert into 表名(字段名) values(字段对应值);
insert into employee (empno,ename,job,mgr,hiredate,sal,deptnu) values ('1000','小明','经理','10001','2019-03-03','12345.23','10');
insert into 表名 values(所有字段对应值);
insert into employee values ('1001','小明','经理','10001','2019-03-03','12345.23','10');
insert into 表名1 select * from 表名2;
insert into 表名1(字段名1,字段名2) select 字段名1,字段名2 from 表名2;
insert into emp (empno,ename) select empno,ename from employee;
create table 表名1 as select 字段名1,字段名2 from 表名2;
create table emp as select empno ,ename from employee;
insert into 表名 (字段名) values (对应值1),(对应值2),(对应值3);
某个公司的员工表
CREATE TABLE employee(
empno INT PRIMARY KEY comment '雇员编号',
ename VARCHAR(20) comment '雇员姓名',
job VARCHAR(20) comment '雇员职位',
mgr INT comment '雇员上级编号',
hiredate DATE comment '雇佣日期',
sal DECIMAL(7,2) comment '薪资',
deptnu INT comment '部门编号'
);
update 表名 set 字段名1=值1 where 主键=值;
update 表名 set 字段名1=值1,字段名2=值2 where 主键=值;
delete from 表名 where 字段名=值;
truncate table 表名;
delete from 表名;
drop table 表名;
面试时:面试官问在删改数据之前,你会怎么做?
答案:会对数据进行备份操作,以防万一,可以进行数据回退
面试时:面试官会问,delete与truncate与drop 这三种删除数据的共同点都是删除数据,他们的不同点是什么?
delele 会把删除的操作记录给记录起来,以便数据回退,不会释放空间,而且不会删除定义。
truncate不会记录删除操作,会把表占用的空间恢复到最初,不会删除定义(不可恢复)
drop会删除整张表,释放表占用的空间。(不可恢复)