****MySQL****中(基本操做)
二进制存储
创建表时需 指定m的值
*BIT(M)*
其中,“M”指定该二进制数的最大存储长度为M,M的最大值为64 指的是位 一个字节8个位
插入数据时,使用 b’位串’的方式插入相应值! 代表二进制 l 查询时,可以使用 bin() 、oct() 、hex() 函数讲字段的值转成相应的二进制、八进制和十六进制.
*create table bit_example (b bit(8) );* *#创建表*
*insert into bit_example values( b’10110111’ );* *#插入记录,可以是二进制位*
*insert into bit_example values( ‘a’ );* *#插入记录,可以是字符,但不能超出字节长度*
*select bin(b) from bit_example ;* *#以二进制的方式显示字段值*
*1. 单字段主键*
单字段主键的语法规则如下:
CREATE TABLE tablename(
propName propType PRIMARY KEY, …
);****或****
CREATE TABLE tablename(
propName propType , …
PRIMARY KEY(propType)
);
Mysql 支持给主键设置名字:
CREATE TABLE tablename(
propName propType , …
CONSTRAINT pk_name
PRIMARY KEY(propType)
);//给主键设置一个别名
主键可以用两个列联合起来(联合主键)比如
CREATE TABLE tablename(
propName propType , …
PRIMARY KEY(propType , propName)
);
外键约束子表的模板列是父表模板列的主键
CREATE TABLE tablename_1(
propName1 propType ,
propName2 propType ,
…
FOREIGN KEY(propName1) REFERENCES table2_name(table2_column)
);// 外键约束可以为空
insert into srudent (name,class_id, sex) values(’小红‘,2,’m‘);//不指定自增长的的模板 插入数据
当数据库表中的某个字段上的内容不希望设置为NULL时,约束在创建数据库表时为某些字段上加上“NOT NULL”约束条件
设置表字段唯一约束(UNIQUE)//表里面模板列不允许重复
设置表字段值自动增加(AUTO_INCREMENT)不指定这个模板列 这个模板列 自增加1(类型必须是整数) 历史上最大值加1 包括删除的!!!(AUTO_INCREMENT)这个约束只能定义为键
delete from class where id=100;//删除一条记录 class 为表名 id 为模板列
*设置表字段的默认值(DEFAULT)*
CREATE TABLE tablename(
propName propType DEFAULT defaultvalue, …
);
alter table [table_name] add constraint [constraint_name] [unique key| primary key|foreign key] ([column_name]) 增加模板列的约束
unique key 列里的值是唯一的 使用时不用加中括号
primary key 主键 constraint [constraint_name]为模板列定义别名
foreign key 模板列为另一个表的主键; column_name 表的名字
show keys from column_name ;//查看键值
*删除*
\1. 通过如下命令查询键值的约束名:
show index或keys from 表名;
\2. 执行如下命令删除:
主键: alter table 表名 drop primary key;
外键或唯一键: alter table 表名 drop index 约束名;
*修改默认值DEFAULT、自增长和非空NK*
alter table 表名 modify 列名 要修改的约束名;
*普通索引*
CREATE TABLE tablename(
propname1 type1,
propname2 type2,
……
propnamen type…n,
INDEX | KEY
[indexname] (propnamen [(length)] [ ASC | DESC ] ) ); //创建表时指定索引 ASC为升序 DESC为降序
create database school;#创建数据库school****
use school; #选择数据库school****
create table class(id int, name varchar(128) UNIQUE, teacher varchar(64), INDEX index_no(id DESC));#创建表class, 并建立为id 字段索引**** 不指定默认为升序
select * from class where id > 0 ;**** *#根据id查询记录,结果将降序排列*
drop table class; 删除这张表
在已有的表创建索引 CREATE INDEX indexname
ON tablename (propname [(length)] [ASC|DESC]); 参数INDEX是用来指定字段为索引,参数indexname是新创建的索引的名字;
create index index_id on class(id ASC);**** *#追加升序索引*
ALTER TABLE tablename ADD INDEX | KEY indexname
(propname [(length)] [ASC|DESC]);
alter table class add index index_id(id DESC); 为模板追剧索引index_id是指为模板创建的新名字
DROP INDEX indexname ON tablename; DROP INDEX关键字删除 删除这个索引
*唯一索引*
关键字 UNIQUE INDEX
必须这个模板列的约束是 UNIQUE 的 查找速度更快 创建用法除关键字外 同上
*全文索引*
关键字 FULLTEXT INDEX
select * from class where match(comment) AGAINST(‘我是一个兵’);#利用全文检索索引快速查询记录**** match 匹配 AGAINST 参照
中文检索
全文支持中文查找 两个字的查找
配置文件my(Windows 10默认路径: C:\ProgramData\MySQL\MySQL Server 8.0) 中增加如下配置项,同时重启MySQL80 服务:
[mysqld]
ngram_token_size=2
create table class(id int, name varchar(128) UNIQUE, teacher varchar(64),comment varchar(1024),FULLTEXT INDEX index_des(comment) with parser ngram);#创建表class, 并建立为comment 字段为全文索引**** with parser ngram 后面固定加的关键字
insert into class values(2,‘2班’,‘Rock’,‘此班主任毕业自唐僧系’);**** *# 插入记录2*
select * from class where match(comment) AGAINST(‘百姓’);********#利用全文检索索引
*多列索引*
和普通索引定义基本相同,不同之处就是增加了多个索引列。多列索引,是指在创建索引时所关联的字段不是一个字段,而是多个字段,虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段中的第一个字段,多列索引才会被使用。
create table class(id int, name varchar(128) UNIQUE, teacher varchar(64), INDEX index_mult_columns(id, teacher));**** *#创建表class, 并建立包含id,teacher字段的多列索引*
select * from class where id > 0 and teacher= ‘rock’ ;多列索引查询必须指定第一个索引条件 id 另一个索引条件可以不加
*隐藏索引*
ALTER TABLE tablename ALTER INDEX index_name INVISIBLE; #隐藏索引
ALTER TABLE tablename ALTER INDEX index_name VISIBLE; #取消隐藏
*删除索引*
DROP INDEX indexname ON tablename;
l *插入完整数据记录*
insert into class(插入的模板列) values(2,‘2班’,‘Rock’,‘此班主任毕业自唐僧系’);指定插入
insert into class(插入的模板列) values(2,‘2班’,‘Rock’,‘此班主任毕业自唐僧系’),(2,‘2班’,‘Rock’,‘此班主任毕业自唐僧系’);追加多条记录插入
*更新表中的数据记录*
UPDATE tablename SET field1 = value1, field2 = value2, field3 = value3, …, fieldn = valuen WHERE CONDITION;
update class set teacher = ‘如花老师’ where teacher = ‘Rock’;#通过teacher 字段匹配更新记录
update class set name=’如花二班’,teacher=‘如花老师’ where id=2; 替换多个数字
update class set name=’如花二班’;修改这列所有的数据
alter table 表名 change coumn 列名 要修改的列名 varchar(64);修改模板列的名字
*删除表中的数据记录*
delete from class where teacher = ‘Martin’;//删除这条记录
delete from class ;// 删除这张表中全部的记录
rop table class;// 删除这张表