学习mysql

本文介绍了SQL和MySQL相关知识。SQL是与数据库通信的语言,有诸多优点,还提及通配符、distinct关键字等使用。阐述了主键、外键的概念、作用及使用前提。MySQL是关联数据库管理系统,有成本低、性能快等优点,同时介绍了其建库、建表、增删改查等操作及列类型知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sql是结构化查询语言,是专门用来与数据库通信的语言。

优点:①sql不是某个特点数据库供应商专有的语言,它使你几乎能与所以数据库打交道;②简单易学;③灵活使用它,可以进行非常复杂和高级的数据库操作。

Sql语句不区分大小写,通配符 *,可以查询出所有的列,如果不要求查询所有列,不建议使用 *,因为这样会降低检索和应用的性能。通配符大的优点是可以检索出未知道的列

使用distinct关键字可以让mysql只返回不同的(唯一的行)值。distinct关键字放在列名前面。

主键(primary key):一列(或一组列),其值可以唯一标识表中每一行。

表中的任何列都可以作为主键,只要它满足:①任意两行都不具有相同的主键值;②每一行都必须具有一个主键值(主键值不允许为NULL值);③主键列中的值不允许修改或者更新;④主键值不能重用,(如果某行从列中删除,它的主键值不能赋给以后的新行)。

主键的作用:①保证实体的完整性;②加快数据库的操作速度;③在表中添加新记录时,DBMS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。④ DBMS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录

外键:如果一张表中有一个非主键的字段指向了别一张表中的主键,就将该字段叫做外键。(它是相对于主键说的,是建立表之间 的联系的必须的前提。)

 外键的作用:①对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败。②对父表的作用:对父表的主键字段进行删和改时,如果对应的主键在子表中被引用,操作就会失败。③为了一张表记录的数据不要太过冗余。④保持数据的一致性、完整性。

使用外键的前提:①表储存引擎必须是innodb,否则创建的外键无约束效果。② 外键的列类型必须与父表的主键类型完全一致。③ 外键的名字不能重复。④ 已经存在数据的字段被设为外键时,必须保证字段中的数据与父表的主键数据对应起来。

缺点:设置外键一定程度上降低数据库的速度,降低数据库的性能(①数据库需要维护外键的内部管理;②外键等于把数据的一致性事务实现,全部交给数据库服务器完成;③有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,而不得不消耗资源;④.外键还会因为需要请求对其他表内部加锁而容易出现死锁情况;)

(完整性: 是指主键上的值不能为空. 比如关系R(学生号,学生姓名,成绩)学生号为主键那它就不能为空否则违反规则.

一致性:就是要始终保证数据的正确性 比如你去银行转钱你转1000但卡里只有300执行事务时查询到你金额不足就会返回拒绝执行而不是把你卡里的300转走,依然保持你卡里之前的金额300这就是一致性.恢复到事务的初始状态.)

 

MySQL是一种关联数据库管理系统数据库管理系统简称DBMS,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

优点:①成本,它是开源的,一般可以免费使用。②性能,mysql执行很快。③可信赖④简单,mysql很容易安装和使用。

缺点:它并不总是支持其他的DBMS提供的功能和特性。

(1)Mysql是开源的,所以你不需要支付额外的费用。

(2)Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。

(3)MySQL使用标准的SQL数据语言形式。

(4)Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。

(5)Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。

(6)MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。

(7)Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。

学习mysql:

1、当我们连上服务器后,先选库“use test;”(如果不知道有那些库可以用“show databases;”来查看)

创建一个数据库:“create database 数据库名 charset utf8;(“create database gy1 charset utf8;”)

 删除一个数据库drop databases 数据库名;(“drop databases gy1;”)

2、再选表show tables;”(如果不知道有那些表,可以用“show tables;”来查看):

简单的建表语句create table stu(snum int,

sname varchar(10) )engine myisam charset utf8;

)

删除一个表drop table stu;

给表改名字rename table stu to newstu;

往表中插入数据:insert into newstu values (1,zhangsan),(2,lisi),(3,xiaoming);

查询表中所以数据:select * from newstu;

清除表中全部数据:truncate newstu;

truncate和delete的区别:

truncate相当于删除原来的表,重新创建一个一模一样新的表,而delete是删除所以层面来操作的。如果全部清除数据,truncate速度更快。

把数据库改名?

Mysql中,表/列可以改名,database不能改名。

语句可以换行,遇到 时才结束。

\c退出语句。

查看表结构:desc 表名;

创建一个员工表:

create table class(

id int primary key auto_increment,

sname varchar(10) not null default ' ',

sex char(1) not null default ' ',

company varchar(20) not null default ' ',

salary decimal(6,2) not null default 0.00,

fanbu smallint not null default 0

)engine myisam charset utf8;

set names gbk;(命令行窗口的默认编码为gbk,而我们在mysql服务端设为utf8,所以存储和调取数据时,编码格式不一致,SET  NAMES GBK 实际是通知服务器,我是gbk,你得负责翻译!)

3、插入操作

插入1:

insert into class

(id,sname,sex,company,salary,fanbu)

values

(1,'张三','男','西南',888.88,234);

select * from class;

插入2:(id是自增型,可以不写)

insert into class

(sname,sex,salary)

values

('张三','男',888.88);

如果不声明插入的列,则默认依次插入所以列

insert into class

values

(null,'李四','男','百度',888.666,232);

或者

insert into class

values

(3,'李四','男','百度',888.666,232);

insert into class

(sname,company,salary,fanbu)

values

('孙权','江东霸主',555.88,233),

('曹操','天下暴君',333.88,145);

4、修改操作:

update class

set fanbu=100

where id=6;

update class set sex='男',fanbu=120  where sname='孙权';

5、删除操作

把工资等于888.88到删除

delete from class where salary=888.88;

delete from class(把表中所有的数据都删除了)

6、查询操作

select sname,company,salary,fanbu from class where id=3;

7、建表:

 

学号

姓名

家乡

入学时间

0101

张三

北京

2019.4.23

建表的过程就是声明字段的过程,建表时要考虑能够存放内容的空间大小,但又不浪费。

存储同样的数据,不同的列类型,所占据的空间和效率是不一样。

重点:列类型的存储范围和占据的字节关系。

8、Mysql三大类型:

(1)数值型:

列类型 

需要的存储量 

TINYINT 

1 字节

SMALLINT 

2 个字节

MEDIUMINT 

3 个字节

INT 

4 个字节

INTEGER 

4 个字节

BIGINT 

8 个字节

FLOAT(X) 

4 如果 X < = 24 或 8 如果 25 < = X < = 53

FLOAT 

4 个字节

DOUBLE 

8 个字节

DOUBLE PRECISION 

8 个字节

REAL 

8 个字节

DECIMAL(M,D) 

M字节(D+2 , 如果M < D)

NUMERIC(M,D) 

M字节(D+2 , 如果M < D)

一个字节8位:无符号0-->2^8-1即0-->255

              有符号-2^7-->2^7-1即-128-->127

两个字节16位:无符号0-->2^16-1即0-->65535

              有符号-2^15-->2^15-1即-32768-->32767

(2)整型

int系列,默认是有符号的。

修改表结构:alter table class1 add score tinyint unsigned not null default 0;

加unsigned (表示无符号)可以影响存储的范围:

alter table class1 add age1 tinyint(1) unsigned not null default 0;

(M)unsigned zerofill

M表示补0宽度,和zerofill配合使用才有作用。

alter table class1 add snum smallint(5) zerofill not null default 0;

(3)小数型

Float(M,D),decimal(M,D)

M叫“精度”表示“总位数”,D叫“标度”,表示“小数位(小数点右边的位数)”

float有时会损失精度,对于银行这些建议用定点decimal。

Char和varchar,分别称为定长和变长类型。

对于char(N),不够N个长度,用空格在尾部补够N个长度,浪费了尾部。(不论够不够指定长度实际都占据n个长度)

对于varchar(N),不用空格补齐,但列内容前,有1-2个字节来标志该列的内容长度。

Char如何占据M个字符宽度?

如果实际存储内容不足M个,则后面加空格补齐。取出来时,再把后面的空格去掉。(所以,如果内容最后有空格,将会被清除)

速度上:定长速度快点。

注意:char(M)、varxhar(M)限制的是字符,而不是字节

即char(2)、charset utf8,能存储2个字符,比如‘中国’。

concat用来连接字符的。

select concat(ca,!),concat(vca,!) from test;

text文本类型,可以存储较大的文本段,搜索速度较慢。因此,不是特别大的数据建议用char、varchar(1万字,varchar就够了)来代替。Test不用加默认值,加了也没有用。

text文本类型一般用来存储文章内容,新文内容等。声明text列时不用给默认值。

create table test(

article text

);就可以了。

lob是二进制类型,用来存储图片、音频等二进制信息。

Blob在于防止因为字符集的问题,导致信息丢失。

4、日期:

create table test(

star varchar(20) not null default ' ',

birth date not null default '0000-00-00'

)engine myisam charset utf8;

insert into test

values

('张国荣','1993-02-12');

时间类型:00:00:00

alter table test add sige time not null default '00:00:00';

insert into test

values

('小米','1999-02-03','21:32:12');

列类型 

需要的存储量 

DATE 

3 个字节

DATETIME 

8 个字节

TIMESTAMP 

4 个字节

TIME 

3 个字节

YEAR 

1 字节

Date能存储时间:1000-01-01到9999-12-31

time -838:59:59和838:59:59

datetime:1000-01-01 00:00:00到9999-12-31 23:59:59

year(1901-2155)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值