发布时间:2024-12-13 08:01
#单行注释(mysql特有)#
-- 单行注释 --
/*多行注释*/
mysql -uroot -p123456 #直接输入密码
mysql -uroot -p #二次输入密码
create databases 数据名库;
drop databases 数据库名;
show databases;
alter table temp add sex varchar(50) NOT NULL comment \'男为0,女为1\'
alter table temp modify sex int(1) not null
alter table temp change sex xingbie int(1) not null
alter table temp drop xingbie
use 数据库名
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP TABLE runoob_tbl ;
char和varchar的区别:
char固定长度,存储的元素底层自动赋定义长度的存储空间,varchar可变长度,存储的元素自动计算元素的大小,赋一个相同大小的内存,大小不能超过定义的长度,一般情况下,字符串长度确定用char,不确定用varchar,char的效率高,但是浪费空间,varchar的效率低,但是空间利用率高
insert into temp(id, username) values(1,\'张三\')
update 表明 set 字段1=值1,字段2等于值2… where 条件
update temp as t set username=\'修改后的张三\' where t.id = \'1\'
delete from 表名 where 条件(不建议给表使用别名)
delete from temp where id = \'1\'
delete语句如果想要使用别名,需要把语句改为以下形式
delete 别名 from 表名 别名 where 过滤语句
select * from 表名
select * from 表名 where 条件语句
select * from 表明 where 字段名 like 模拟条件
%代表任意字符,_代表一个字符,如果要进行带有%或者_的查询时,要用转义字符’’
select * from 表名 where 条件
union
select * from 表名 where 条件
select * from 表名 where 条件 order by 顺序
ASC 表示升序,DESC表示降序
select * from 表名 where 条件 group by 字段名
当两个表没有任何限制条件是,连接的次数就会是两个表的记录数之积
解决方案:设置限制条件,但是连接次数没有变,只是改变了显示的数据。
用法类似于like
select * from 表明 where 字段名 regexp \'正则表达式\'
select * from 表
inner join 连接表
on 连接条件
...
where 过滤条件
group by 分组条件
having 过滤条件
order by 排序条件
where 条件
having语句与where语句相似,但是having在group by后执行,where在前,having只有在使用了group by时才能用,效率低,因此能用where过滤掉的尽量用where过滤。
having 条件
select distinct comptemplate.* from comptemplate
事务:最小的不可再分的工作单元;通常一个事务对应一个完整的业务。
在事务进行过程中,未结束之前,DML语句不会更改底层数据,它只是将历史数据记录一下,在内存中完成记录。只有在事务结束的时候,而且是成功的结束的时候,才会修改底层硬盘文件中的数据。
读未提交:对方失误还没有提交,我们当前事务可以读取到对方未提交的数据
读已提交:对方事务提交之后的数据我方可以读取到,这种隔离级别解决了脏读现象
可重复读:读取的数据始终是第一次读入的数据,此数据是备份的数据,不是真实的数据,真实的数据实际上已经改变。
序列化读/串行化读:只有当该线程上的数据被提交,该数据才能被再次修改。
set autocommit = 1 # 开启自动提交(默认,使用事务时需要关闭)
set autocommit = 0 # 禁止自动提交
begin #开启事务
rollback #事务回滚
commit #事务确认
相当于给数据设置一个目录,提高数据的查询效率
CREATE INDEX indexName ON table_name (column_name)
ALTER table tableName ADD INDEX indexName(columnName)
CREATE TABLE mytable(
id INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
DROP INDEX [indexName] ON mytable;
mysql采用B+ Tree作为索引结构,通过B Tree缩小扫描范围,底层索引进行了排序、分区,索引会携带数据在表中的物理地址,最终通过索引检索到数据之后,获取到相关的物理地址之后,定位表中的数据,从而实现高效率。
只在当前连接可见,当关闭连接时,mysql会自动删除并释放所有空间。
mysql序列是一组整数:1,2,3…,由于一张数据表只能有一个字段自增主键,如果你想实现其他字段也实现自动增加,就可以使用Mysql序列
表的存储方式
show engines \\G
采用三个文件组织一张表,xxx.frm(存储表结构的文件)、xxx.MYD(存储表中数据的文件)、xxx.MYI(存储表中索引的文件),不支持事务,可被压缩,并且可以转换为只读表
表结构在frm文件中,数据储存在tablespace表空间中,无法被压缩,无法转换为只读,在Mysql数据库崩溃之后提供自动恢复机制,支持级联删除和级联更新
不支持事务,数据容易丢失,因为所有数据和索引都是存储在内存当中的,查询速度快。
保证表的合法性,有效性,完整性
约束的字段不能为null
约束的字段不能为空,也不能重复,一个表中只能存在一个,其标识作用。
主键自动维护机制:字段后加一个auto_increment,这个字段将每存入一条数据,字段值自动加一。
引用的字段名必须具有唯一性(是主键或者有unique约束均可),并且引用的字段类型必须要与被引用的字段名的数据类型相同。
视图可以隐藏表的实现细节,保密级别较高的系统,数据库只对外提供相关的视图,Java程序员只对视图对象进行CRUD;
主键共享,外键唯一
两张表,多的表加外键
三张表,添加中间表