数据库相关(1)

以MySql为例

1.命令行操作

  练习SQL语句还是在命令行下实践比较好

  安装好MySql后,打开他自带的命令行界面后,直接输入密码即可进入

  

/*
	 * 对库的操作
	 */
	
	//查看已存在的数据库,注意复数形势:   
	show  databases;

	//创建数据库,最好带上编码格式:          
	create database student character set utf8;

	//更改编码格式:                                          
	alter database student character set utf8;

	//查看指定的某一个数据库结构:              
	show create database student;

	//删除某一个数据库,最好带上判断:      
	drop database if exits student;

    /*
     * 对表的操作
     */
	//对表操作之前要声明用哪个数据库,直接是数据库名,没带上database的声明:     
	use student;       
	
	//创建一张表,圆括号,不是尖括号:     
	create table user(id int,name varchar(20),password varchar(8),birthday date);     

	//查看所有的表,若没有,提示empty,复数形式:  
	show tables;        

	//查看指定的表结构:                                 
	show crate table user;             

	//给表加一列:                                             
	alter table student add age int;

	//修改某一字段的属性:                             
	alter table student modify name varchar(30);

	//修改这一字段的名称和属性,被改的无需写上长度属性,改后的属性要标明:                 
	alter table student change name username varchar(10);  

	//改变表的编码:                                         
	alter table student character set gbk;

	//重命名表:                                                  
	rename table student to students;

/*
	 * 乱码问题
	 * 一般中文乱码是由于数据库client编码和自己指定的编码不一致导致的,若要中文需要GBK编码
	 */
	//查看环境信息,注意 %
	show variables like 'character%';
	//更改环境里的编码
	set character_set_client=gbk;
	//还有显示编码也要一致
	set character_set_results = gbk;


/*
	 * 增
	 */
	//第一次插入需要写入字段名称,后续则不用
	insert into employee(id,username,gender,birthday,entry_date,job,salary,resume,image) values(1,'allen','male','1990-1-1','2010-1-1','CEO',9999.00,'someday','noday');
	
	insert into employee values(2,'lisi','male','1990-1-1','2010-1-1','CEO',9999.00,'someday','noday');
	//只插入部分还是需要写入字段的
	insert into employee(id,username,gender,resume,image) values(3,'Kitty','female','someday','noday');
	//查看所有表元素
	select * from employee;



/*
	 * 改
	 */
	//修改某一列所有属性值
	update employee set resume='n/a';
	//修改某一列的某一行属性值
	update employee set resume='yes' where id=1;
	//更改某一行多个属性值
	update employee set id=5,gender='femal' where username='allen';
	//数值项四则运算
	update employee set salary=salary+100 where id=2;

/*
	 * 删除表中数据 delete,若不带from来限定,则所有数据删除,但是表结构(定义)还在
	 * 若要删除表定义,请用drop table 
	 * 另truncate,是删除表记录,类似不带from的delete
	 * 但是drop和truncate是DDL,自动提交,立即生效;delete是DML,可以回滚
	 */
	delete from employer where id=4;
	drop table employee;

另立了一个表


/*
	 * 查 前面用的 * 查所有
	 */
	//查某两列
	select name,english from pupils;
	//过滤重复数据,多列时关键字distinct必须在首项,且必须多列都重复才过滤
	select distinct name,english from pupils;
	//查某一列并同时加上一个值
	select name,math+1 from pupils;
	//查询时可将列的显示位置变换,同时显示每一行的数值之和
	select name,math,chinese,english,math+chinese+english from pupils;
	//别名显示
	select name as '用户名' from pupils;
	//范围刷选,可以按照大于、小于号来,也可按照 in(可选值列表) 来定
	select name,math,english,chinese from pupils where english>70 and math<99;
	select name,math,english,chinese from pupils where math in(70,60,100);
	//模糊查询,%
	select name,math,english,chinese from pupils where name like '李%';
	//排序,默认是升序,降序是order by desc
	select name,math,math+chinese+english from pupils order by math+chinese+english desc;

关于Null

若在插入时,输入的内容为空,则查询时显示的为null,但这个不是真正的null,按照null为关键字查询时提示为empty

只有在插入时 不输入这一项,查询时才可以按null为关键词查询





2.主键 & 外键 & 多表查询

关于主键:

某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如:

 

学生表(学号,姓名,性别,班级)

其中每个学生的学号是唯一的,学号就是一个主键

 

用户表(用户名、密码、登录级别)

其中用户名是唯一的, 用户名就是一个主键


主键主要是用于其他表的外键关联,以及本记录的修改与删除


2.1 一对多

建一个省份表,主键是省份的id

建一个学生表,主键是学生id

每个省份id可以对应多个学生的籍贯省份信息

此时,有了主键后,插入数据时,主键不能为空,而且不能重复。

/*
	 * 主键、外键
	 */
	create table province ( id int primary key,province varchar(9));
    create table student (id int primary key,name varchar(20),provinceid int);
    //插入数据时,各自的主键值不能重复且不能为空
    insert into province values(1,'新疆维吾尔族自治区');
    insert into province values(2,'内蒙古自治区');
    //此时没有外键,没有和省份表关联,省份id可以自由加
    insert into student values(1,'陈金旭',1);
    insert into student values(2,'田伟',2);
    insert into student values(3,'李阳',3);

但是这个时候两张表没有任何关系

以省份表为学生表外键来源

此时学生表里多了一个省份3,要删掉才能添加外键,或者在省份表里加一个ID=3

    //删除掉外键里没有的id
    delete from student where id=3;
    /*
     * 添加外键
     * FK_provinceid是自定义的外键名
     * foreign key(province)表明这张表哪个字段需要关联外键
     * province(id)表明是哪张表的哪个字段当做外键
     */
    alter table student add constraint FK_provinceid foreign key(province) references province(id);

 此时要用别的省份,需要在省份表里添加一个省份才行 

//添加一个省份
    insert into province values(3,'黑龙江');
    //此时在学生表里才能用到黑龙江
    insert into student values(3,'李阳',3);


2.2 多对多

师生对应关系,另建一个数据库

每个老师可以对应多个学生,每个学生也有多个老师

建立老师表和学生表,定义主键

//学生表老师表
    create table teacher(id int primary key,Name varchar(10) not null);
    create table student(id int primary key,Name varchar(10) not null);
    
    //插入数据
    insert into student values (1, '江峰');
    insert into student values (2, '进旭');
    insert into student values (3, '熊吉');
    insert into student values (4, '苏浪');
    insert into student values (5, '王丹');
    
    insert into teacher values (1, 'Chinese');
    insert into teacher values (2, 'math');
    insert into teacher values (3, 'english');
    insert into teacher values (4, 'physics');
    insert into teacher values (5, 'movie');

此时应该再建立一个表,将学生与老师的ID关系对应,并分别作为学生表、老师表的外键

//外键对应表
    create table course(T_ID int,S_ID int);
    //分别作为外键
    alter table course add constraint FK_courseT_ID foreign key (T_ID) references teacher(id);
    alter table course add constraint FK_courseS_ID foreign key (S_ID) references student(id); 


建立对应关系,只需在外键表里插入数据即可
//给外建表插入数据
    insert into course values(1,1);
    insert into course values(3,1);
    insert into course values(5,1);
    insert into course values(4,4);
    insert into course values(1,5);
    insert into course values(3,5);
    insert into course values(5,4);
    insert into course values(4,5);
    insert into course values(5,5);

可以看到对应关系


1号学生对应着1、3、4号老师,以此类推


2.3 一对一关系

夫妻关系

/*
     * 一对一
     */
    create table husband (id int primary key,name varchar(10));
    create table wife (id int primary key,name varchar(10));
    //给wife增加一个husbandid字段,作为关联
    //并且这个值应该是唯一的,否则可以出现多个wife嫁给同一个husband的情况,wife表插入时husbandid可以相同
    alter table wife add husbandid int;
    alter table wife add constraint FK_wife_husbandid foreign key(husbandid) references husband(id);
    alter table wife modify husbandid int unique;

正常的写法,另外也可以通过外键关联来实现,因为主键本身就是唯一的

/*
     * 正常写法
     */
    create table PERSON(ID int primary key,NAME varchar(100));
    create table computer(ID int primary key,brand varchar(20),
    		 PERSON_ID int unique,constraint FK_PERSON_ID foreign key(PERSON_ID) references PERSON(ID));
    //也可以通过外键关联
    create table computer(ID int primary key,brand varchar(20),
    		constraint FK_PERSON_ID foreign key(ID) references PERSON(ID)



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值