mysql数据库入门2 +每日一问

mysql数据库入门2
db2

查看约束条件
desc 库名.表名; //查看表的表头信息

设置约束条件
null 允许为空(默认设置)
not null 不允许为\null(空)
key 键值类型
default 设置默认值,缺省为null
extra 额外设置

create table db1.t7(
name char(10) not null,
age tinyint unsigned default 19
class char(7) not null default “nsd1902”
pay flaot(7,2) default 28000
);

mysql> create table db1.t21(
-> name char(10) not null,
-> age tinyint unsigned default 25,
-> sex enum(“m”,“w”) not null default “w”
-> );
mysql> insert into db1.t21(name)values(“jerry”);
mysql> insert into db1.t21 values(“bob”,29,“m”);

mysql> insert into db1.t21 values(null,null,null);

mysql> insert into db1.t21 values(“null”,null,null);
ERROR 1048 (23000): Column ‘sex’ cannot be null
mysql>

mysql> insert into db1.t21 values(“null”,null,“m”);
mysql> select * from db1.t21;

语法结构
alter table 库名.表名 执行动作
add 添加字段
modify 修改字段类型
change 修改字段名
drop 删除字段
rename 修改表名

添加新字段
alter table 库名.表名
add 字段名 类型(宽度) 约束条件
[after 字段名| first];
例子
mysql> alter table db1.t10 add email varchar(50) default "stu@tedu.cn" ;
mysql> alter table db1.t10 add stu_num char(9) first;
mysql> alter table db1.t10 add age tinyint unsigned not null default 19 after name;

修改字段类型
alter table 库名.表名
modify 字段名 类型(宽度) 约束条件
[after 字段名 | first];
例子:
mysql> alter table db1.t10 modify name varchar(15) default “” ;
mysql> alter table db1.t10
modify age tinyint unsigned not null default 19 after sex;

修改字段名
alter table 库名.表名
change 源字段名 新字段名 类型(宽度)
约束条件;
例子
mysql> alter table db1.t10
change likes loves set(‘eat’,‘game’,‘piao’,‘du’,‘film’) ;

修改表名
rename 修改表名
mysql> alter table db1.t10 rename db1.classinfo;

删除字段
基本用法:
表中有多条记录时,所有列的字段的值都会被删除
alter table 库名.表名 drop 字段名;
例子
alter table db1.t2 drop user_num,drop pay;

修改表名
基本用法
表对应的文件名,也被改变
表记录不受影响
alter table 表名 rename 新表名
alter table t2 rename school;

下午的笔记

3.1 键值种类:

	普通索引 index   ***

	唯一索引 unique

	主键 primary key ***
	
	外键 foreign key ***

	全文索引 fulltext


3.2 什么是索引?
	索引的优点及缺点
	索引的使用: 索引使用规则 查看索引 创建索引 删除索引

已有表里创建索引字段key_name
create index

ql> create table t3(
-> name char(10),
-> age tinyint,
-> sex enum(“m”,“w”),
-> index(name),index(age)
-> );

mysql> desc t3;
mysql> show index from t3\G;

mysql> drop index name on t3;

mysql> desc t3;
mysql> show index from t3\G;

mysql> show index from db2.t1\G;

mysql> create index aaa on db2.t1(name);
mysql> create index age on db2.t1(age);
mysql> desc db2.t1;

mysql> show index from db2.t1\G;

index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值

对表中的数据进行增加、删除、修改的时候,索引也需要动态维护,降低了数据库的维护效率
对表中的数据进行增加、删除、修改的时候,索引也需要动态维护,降低了数据库的维护效率
对表中的数据进行增加、删除、修改的时候,索引也需要动态维护,降低了数据库的维护效率
对表中的数据进行增加、删除、修改的时候,索引也需要动态维护,降低了数据库的维护效率

primary key主键
主键的对应字段不允许有重复,且不允许赋null值
主键的对应字段不允许有重复,且不允许赋null值
主键的对应字段不允许有重复,且不允许赋null值
主键的对应字段不允许有重复,且不允许赋null值
主键的对应字段不允许有重复,且不允许赋null值
主键的对应字段不允许有重复,且不允许赋null值

作用:限制字段赋值
使用规则
使用主键:
1.字段值不允许重复,且不允许赋null值
2.一个表中只能有一个primary key 主键字段
3.多个字段都左前卫主键,成为复合主键,必须一起创建.
4.主字段的标志是PRI
5.主键通常与auto_increment连用
6.通常把表中唯一标识记录的字段作为主键;

primary key 主键的对应字段不允许有重复,且不允许赋null值

复合主键
约束方式:主键字段的值不可以同时重复

primary key 与 auto_increment 连用
自增长
赋值时 字段的值字段加1

foreign key 外键
使用foreign key的时候表的存储引擎必须是innodb,不能是其他

作用:限制给字段赋值,插入记录时,字段值在另一个表字段值范围内选择.

使用foreign key的时候表的存储引擎必须是innodb

create table db2.t7(
id int primary key auto_increment,
name char(15),
sex enum(“w”,“m”),
age tinyint,
class char(7)
);

id name sex age class
1 bob m 21 nsd1902
2 tom m 19 nsd1903
3 lucy w 25 nsd1906

insert into db2.t7(name,sex,age,class)values(“bob”,“m”,21,“nsd1902”);
insert into db2.t7(name,sex,age,class)values(“tom”,“m”,19,“nsd1903”);
insert into db2.t7(name,sex,age,class)values(“lucy”,“w”,25,“nsd1906”);

select * from db2.t7;
select * from db2.t7 where id=2;

insert into db2.t7 values(9,“lucy”,“w”,25,“nsd1906”);
select * from db2.t7;

mysql> insert into db2.t7(name,sex,age,class)
values(“jerry”,“m”,19,“nsd1902”);

select * from db2.t7;

mysql> create table yg(
-> yg_id int primary key auto_increment,
-> name char(15)
-> )engine=innodb;

mysql> desc yg;

mysql> create table gz(
gz_id int,
gz float(7,2) default 20000,
foreign key(gz_id) references yg(yg_id)
on update cascade on delete cascade
)engine=innodb;

mysql> desc gz;

mysql> show create table gz\G;

mysql> update yg set yg_id=8 where yg_id=4;
mysql> delete from yg where yg_id=8;

mysql> show create table gz\G;
mysql> alter table gz drop foreign key gz_ibfk_1 ;

mysql> insert into gz values(9,58000);
mysql> show create table gz\G;

使用规则:
1.表存储引擎必须是innodb (innodb存储引擎是共享表空间的,共享!!!共享!!!)
2.字段类型要一致
3.被参照字段必须是索引类型的一种,通常是primary key主键

innodb存储引擎
innodb存储引擎是共享表空间的

mysiam引擎
myisam引擎支持表级锁,不支持行级锁,不支持事务

mysql锁的类型有那几种
读锁 (共享读)
写锁 (并发读) 写锁是独占锁,上锁期间其他线程不能读表或者写表

创建外键
create table 库.表 (
字段名列表,
foreign key(字段名) reference 表名(字段名)
on update casecade 同步更新,随被引用的表值变化二变化
on delete casecade 同步删除
)engine=innodb;

建立员工表
mysql> create table db1.staff(
-> staff_id int primary key auto_increment,
-> name char(20)
-> )engine=innodb;
Query OK, 0 rows affected (0.20 sec)

salary 工资表

mysql> create table db1.salary( salary_id int, salary float(7,2), foreign key(salary_id) references staff(staff_id) on update cascade on delete cascade )engine=innodb;
Query OK, 0 rows affected (0.25 sec)

mysql> show create table db1.staff\G //竖着查看工资表
*************************** 1. row ***************************
Table: staff
Create Table: CREATE TABLE staff (
staff_id int(11) NOT NULL AUTO_INCREMENT,
name char(20) DEFAULT NULL,
PRIMARY KEY (staff_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql> show create table db1.salary\G //竖着查看工资表
*************************** 1. row ***************************
Table: salary
Create Table: CREATE TABLE salary (
salary_id int(11) DEFAULT NULL,
salary float(7,2) DEFAULT NULL,
KEY salary_id (salary_id),
CONSTRAINT salary_ibfk_1 FOREIGN KEY (salary_id) REFERENCES staff (staff_id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

同步更新
update db1.staff set staff_id=4 where staff_id=3

控制发工资的员工的编号只能是员工表的员工编号 外键
控制发工资的员工编号不能为空 主键

练习题 未做
50 51 52 53
数据库密码

前任信息表
婚宴邀请表

create tables pre.wedlist( foreign key(name) references former(name) on update cascade on delete cascade,way enum(car,bus),come enum(“yes”,“no”),primary key(name) )engine=innodb;

day3
搜锁路径

查看搜素路径

安装时已自动创建
show variables like “secure_file_priv”; //查看数据库在系统的存放路径

ls -ld /var/lib/mysql-files/ 查看存放数据的路径权限

修改搜素路径
操作步骤
-创建目录并修改所有者
-修改主配置文件
-重启服务
mkdir /myload
chown mysql /myload
vim /etc/my.cnf
[mysqld]
secure_file_priv="/myload"

systemctl restart mysqld

出错1
修改了配置文件出错
[root@fay50 ~]# vim /etc/my.cnf
[root@fay50 ~]# mkdir /myload
[root@fay50 ~]# chown mysql /myload
[root@fay50 ~]# vim /etc/my.cnf
[root@fay50 ~]# systemctl restart mysqld
Failed to restart mysqld.service: Unit not found.

排错:
[root@fay50 ~]# mkdir /myload
[root@fay50 ~]# cp /etc/passwd /myload/ ///必须是复制到/myload/目录下 才有passwd文件

出错2
mysql> load data infile “/myload/passwd” into table db3.user fields terminated by “:” lines terminated by “\n”;
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

排错
vim /etc/my.cnf

secure_file_priv="/myload"

systemctl restart mysqld

2019-06-11 今天的问题:


1 创建外键的必要条件(3个)和命令


2 如何将系统文件的内容导入数据库表中?


3 name字段中第二个字符是a的所有字段的表记录


4 db3.user表中,刷选id是偶数,uid和gid加起来大于100,只要显示前两行


6月11日问题答案:


1.
条件:
1)两个表中的字段类型必须相同


2)引擎必须是innodb


3)被参考字段必须是键值的一种,通常是主键
命令:
1)创建表时创建外键

create table db3.udp(id int primary key,
name char(10),
foreign key(id) references db3.user(id)
on update cascade
on delete cascade)
engine=innodb;


2)在已存在表上添加外键
alter table db3.udp add constraint 外键名 foreign key(id) references db3.user(id) on update cascade on delete cascade;


2. load data infile “路径/文件名”
into table db3.user
fields terminated by “分隔符”
lines terminated by “\n”;


3. select * from db3.user where name regexp “^.a.*”;

4. select * from db3.user where id%2=0 and (uid+gid)>50 limit 2;




2019-06-11 今天的问题:
1 创建外键的必要条件(3个)和命令
2 如何将系统文件的内容导入数据库表中?
3 name字段中第二个字符是a的所有字段的表记录
4 db3.user表中,刷选id是偶数,uid和gid加起来大于100,只要显示前两行








6月11日问题答案:
1.
条件:
1)两个表中的字段类型必须相同
2)引擎必须是innodb
3)被参考字段必须是键值的一种,通常是主键
命令:
1)创建表时创建外键
create table db3.udp(id int primary key,name char(10),
foreign key(id) references db3.user(id)
on update cascade
on delete cascade)
engine=innodb;
2)在已存在表上添加外键
alter table db3.udp add constraint 外键名 foreign key(id) references db3.user(id) on update cascade on delete cascade;

2. load data infile “路径/文件名”
into table db3.user
fields terminated by “分隔符”
lines terminated by “\n”;

3. select * from db3.user where name regexp “^.a.*”;

4. select * from db3.user where id%2=0 and (uid+gid)>50 limit 2;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值