>

mysql基础教程,欢迎纠正

- 编辑:金沙国际平台登录 -

mysql基础教程,欢迎纠正

MySQL安装到位之后,基本操作有:1.成立数据库   2.刨除数据库    3.改良数据库

1.1基本概念:

1.创建数据库

Mysql是风流倜傥种关系型数据库,将数据贮存在分歧的表格中,表格中的要素有:

在MySQL中,创设数据库的命令为   create database  数据库名;    当中可在数据库名前增加  if not exists,表示不另行成立同名数据库。

?列:表中的多少个字段,三个列满含了平等数据类型的数码。

2.剔除数据库

?行:表中的数量是按行存款和储蓄的,行是表中的二个记下。假诺将表想象为网格,网格中垂直的列为表列,水平作为表行。

在本来就有的数据库中可筛选贰个空头的数据库删除,命令为   drop database 数据库名;   也可在数据库名前增多 if exists,表示删除已存在的数据库。

?主键:数据库中的标记列,主键具备唯大器晚成性且不能够为NULL。

3.查询数据库

1.2mysql语句典型:

查询数据库的编码格局可用   show create database 数据库名;    若要查询数据库中的表,则可用    show tables in 数据库名。

1)Sql语句必须以;结束;

成立数据库后可对数据库实行操作,创设数据表:首先输入指令   use 数据库名;   然后输入指令    create table 数据注解(数据名1 数据格式,数据名2 数据格式......);

2)保留首要字不区分朗朗上口写;

数码格式大概分为三种类型:1.数字类型 2.时光项目 3.文本类型

3)可随意加盟空白和换行符;

1.数字类型:TINYINT                      私下认可带符号,若不带符号则在其后增加 UNSIGNED 表示  不含有负数   (下同卡塔尔国

4)注释的运用:单行注释格式为:【--注释】,多行注释格式为【/*注释*/】。

                     SMALLINT            

1.3 mysql的命令行操作命令:

                     MEDIUMINT            

1)登入mysql:【mysql  -h 主机名 -u 客户名 -p】-h表示要一而再再而三到哪大器晚成台主机的

                     INT或INGEEGER      

mysql数据库,当登陆当前主机时可总结;-u内定顾客名,默以为root;-p为设置时设定的密码,假若为空能够省略。

                     BIGINT

示例:

                     FLOAT                         使用时应有在其后加(a,b卡塔尔表示整数和小数的位数

登陆本机mysql数据库:【mysql -u root -p】

                     DOUBLE                      同上

签到远程主机mysql数据库:【mysql -h 192.168.10.111 -u root -p】

2.日子项目:DATE                           年-月-日

签到本机mysql数据库直接加密码:【mysql -u root -p11111】

                     TIME                            时:分:秒

2)创造/删除数据库:创建:【create database 数据库名;】删除:【drop database 数据库名】

                     YEAR                           年份

示例:

                     DATETIME                   年-月-日 时-分-秒

创办三个名叫test的数据库:【create database test;】

                     TIMESTAMP                两时日之间隔离的秒

去除三个名字为test的数据库:【drop database test;】

3.文本类型:CHACR-V                           定长字符

3)查询数据库/数据表:

                     VARCHA大切诺基                    变长字符

?查询数据库:【show databases;】在经过该命令查询时发现在除本人创办的数据库之外,还恐怕有八个默许的库,查找有关质感后对其進展了认知,分别是:information_schema库,该库保存着有关MySQL服务器所保险的有所别的数据库的音讯,如数据库名,数据库的表等;mysql库,mysql的骨干数据库,存款和储蓄了数据库的客户、权限设置、关键字等mysql本身必要接纳的操纵和治本音信;performance_schema库,该库首要用于搜罗数据库服务器品质参数。

                     TINYBLOB                    不超越2五十多个字符的二进制字符

?查询数据表:【show tables】,注意查询数据表应该在甄选好了数据库之后张开,要是是在步向mysql后未采取特定数据库使用此命令,则不算。

                     TINYTEXT                     短文本字符串

?查询表结构:【desc 表名】。

                     BLOB                             二进制长文本数据

4)接受数据库:有三种格局,分别为:1.登入时一贯钦命:【mysql -D 所选取的数据库名 -h 主机名 -u 顾客名 -p】2.登录后选择操作的数据库:【use 数据库名】

                     TEXT                             长文本数据

示例:

                     MEDIUMBLOB              二进制中等文本数据

登录时:【mysql -D testdb -u root -p】,或者【mysql -D testdb -u root -p11111】

                     MEDIUMTEXT              中等文本数据

登录后:【use testdb】

                     LONGBLOB                  二进制超大文本数据

补给,另大器晚成种登入时的筛选,更简便:【mysql -u root -p11111 testdb】

                     LONGTEXT                  十分大文本数据

5)创制/删除数据表:

具有数据中都能够安装空与非空 即 null 与 not null,若数据足以为空则能够在数据类型后增进null,也可不加;若不能够为空,则必须加not null;

?创立数据表:【create table 表名 (列注脚卡塔 尔(阿拉伯语:قطر‎】列的扬言钦赐了各列的习性,日常包涵以下几点要素:

数据表创造实现后方可向数据表中增多新的列,命令格式为               alter table 表名 add column 新列名 数据格式;   

1.表名;

生龙活虎经要求向数据表中插入一条新的数据时,可用命令                          insert 表名(列名1,列名2......) values(数据风华正茂,数据二......);             (必需逐风姿洒脱对应卡塔尔

2.表中的各列名;

或者                                                                                                      insert 列名 set 列名一 = 数据一,列名二 = 数据二,......

3.数据类型:mysql中定义了多少个大类的数据类型,具体分类见下方:

当开掘数据表中剩下的数目时,可以去除多余的数码,命令格式为    delete from 表名 where 条件;

4.是或不是为主键;

当开采表中数据供给立异时,能够用创新数据的命令,命令格式为    update 表名 set 列名 = 新数据 where 条件;

5.是或不是足以为NULL;

若有多条数据必要更新时,能够采纳when then 达到,命令格式为     update 表名 set 列名 = case when 条件 then 新数据 when 条件 then 新数据 ...... end;

整型:(无符号通过unsigned关键字标志卡塔 尔(阿拉伯语:قطر‎

发觉数目不适合数据类型时,能够更换数据类型,命令格式为            alter table 表名 modify column 列名 新数据格式;

类型 字节 范围(有符号) 范围(无符号)


tinyint 1 -128~127 0~255

SELECT的应用

smallint 2 -32768~32767 0~65535

风姿洒脱.函数接收

mediumint 3 -8388608~8388607 0~16777215

1.求平平均数量:select avg(列名 from 表名;                      也可在avg(   卡塔 尔(阿拉伯语:قطر‎后加as 你愿意看见的平平均数量列名,使表格突显出来的是as后边的字符并不是avg(   ),下同

int 4 -2147483648~2147483647 0~4294967295

2.求和:       select sum(列名) from 表名;

bigint 8 +-9.22*10的18次方 0~1.84*10的19次方

3.求最大值    select max(列名) from 表名;

浮点型:

4.求细微值    select min(列名) from 表名;

类型 字节 含义 用途

二.查找

float 4 float(m,d)最大位数m位,小数点后d位 单精度浮点数

1.select 要探求的列名 from 表名 where 条件;              要搜索的列名处可输入*代表全体列

double 8 double(m,d)最大位数m位,小数点后d位 双精度浮点数

2.select 要探索的列名 from 表名 where 列名<值1 or 列名 >值2;          查找列中型Mini于值1或然超过值2的装有数据

decimal decimal(m,d),若m>d,则为m+2;不然为d+2 适用于高精度 小数

3.select 要研究的列名 from 表名 where 列名>值1 and 列名 <值2;       查找值1与值2之间的数目,若是急需搜求等于值1,值2的数码就在<,>后加= 

日子和岁月档案的次序:

   select 要寻觅的列名 from 表名 where 列名between 值1 and 值2;     查找值1与值2之间的数额

类型 字节 格式 示例

4.select 要探寻的列名 from 表名 where 列名 like a_;         查找格局为a_ 的数据,_表示叁个未钦定字符

DATE 3 YYYY-MM-DD 2017-07-22

   select 要寻找的列名 from 表名 where 列名 like a%;     查找方式为a%的数目,%代表多少个未钦命字符,不计个数

TIME 3 HH:MM:SS 15:47:30

 

YEAR 1 YYYY 2017

DATETIME 8 YYYY-MM-DD HH:MM:SS 2017-07-22 15:47:30

TIMESTAMP 4 YYYYMMDD HHMMSS 20170722 154730

字符串类型:

类型 字节 含义

CHARAV4 0-255;char(m)代表存款和储蓄字符长度为m,相当不够则补空格,超过则截取m个 定长字符串

VARCHAPAJERO 0-65535 变长字符串

TINYBLOB 0-255 短二进制字符串

BLOB 0-65535 二进制格局的文件数据

MEDIUMBLOB 0-16777215 二进制格局的中档文本数据

LONGBLOM 0-4294967295 二进制方式的长文本数据

TINYTEXT 0-255 短文本字符串

TEXT 0-65535 文本字符串

MEDIUMTEXT 0-16777215 中等本文字符串

LONGTEXT 0-4294967295 长文本字符串

示例:

【create table testworkers

(

id int unsigned not null auto_increment primary key,

name char(8) not null,

sex char(6) not null,

age tinyint unsigned not null

);】

?删除数据表:【drop table 表名;】

示例:

删除testworkers表:【drop table testworkers;】

6卡塔 尔(阿拉伯语:قطر‎数据的增加和删除改查等操作:

?插入数据:【insert into 表名 [(列名1,列名2......列名n)] values [(值1,值2......值n)]】。有以下几点供给小心:

1.into能够归纳;

2.字符串供给接受’ ’只怕” ”;

3.列名能够大致,可是这个时候必得比照各列的概念顺序来插入数据;

4.足以只插入部分列的数据,别的未有现身的列将被赋予暗中同意值;

5.足以由此一条语句二遍性插入多行数据,格式为【insert into 表名values (值1,值

2,值3),(另二个列1的值,另三个列2的值,另二个列3的值); 】;

5.得以行使set子句来插入数据,格式为【insert into set 列名1=’值1’,列名2=’值2’】;

6.auto_increment标记的字段能够毫不赋具体值,系统为自行依据前一条约标值实行自增。

示例:

简轻易单列名的插入:【insert into testworkers values (10001,"axx","male",35);】

大器晚成对列的插入:【insert testworkers (name,sex,age) values (bxx,"female",27);】

二回性插入多列:

【insert into testworkers values (10003,'cxx','male',28),(10004,'dxx','male',40);】

贰遍性插入多列,同偶然间只对有的列赋值:

【insert into testworkers (id,name,sex) values (10005,'cxx','male'),(10006,'dxx','male');】

运用set子句插入,同一时间只对有个别列赋值:【insert into testworkers set name='exx',age='50';】

?查询数据:

1.查询表的全体内容:【select * from 表名;】

2.查询单个列:【select 列名 from 表名;】

3.查询七个列:【select 列名1,列名2......列名n from 表名;】

4.查询列并限量前n行:【select 列名from 表名 limit n;】,查询列并节制从m+1行发轫的n行:【select 列名from 表名 limit m offset n;】

5.只询问不相同的值:【select distinct 列名 from 表名;】注意distinct功用于其后具有的列,不是单列,当功能于如下多列时【select distinct 列名1,列名2 from 表名】,列1和列2同期比较,独有当两行的列1和列2都相似期才不会列出,有贰个一直以来则会列出。

6.查询单个并排序:使用order by 子句:【select 列名 from 表名 order by 列名;】注意这里的七个列名并不一定要求黄金年代致,且order子句一定在指令的最末尾。

7.查询八个列并列排在一条线序:【select 列名1,列名2......列名n from 表名 order by 列名x 列名y;】要专一的是:排序按语句的依次举办,当列x的富有数据不一致期,列名y排序无效;当列x的多寡有再度时,则遵照列y的相继实行排序。

8.查询多个列并按列的地方排序:【select 列名1,列名2......列名n from 表名 order by x y;】注意这种格局只适用于排序的列在select的列之中,且列的职位不是指完全数据表中该列的地点号,而是指select语句后的地点号。

9.查询并降序排序:当仅用order by子句时,数据的排序以升序举行,若是必要多少按降序排序来输出,则下令格式为【select 列名1,列名2......列名n from 表名 order by 列名x desc;】

10.特定尺度查询:使用where子句:【select 列名1,列名2......列名n from 表名 where 条件;】,这里的基准是指由where子句的操作符所定义的法规表明式,where子句的操作符如下,意思如字面所示。

= != < <= > >= !< !> between is null

11.组合条件查询:使用where子句搭配逻辑操作符,逻辑操作符重要有

and or in not

and和or分别代表逻辑上的与和或,不过要专一and的预先级高于or,在结合使用时要留意搭配顺序。in操作符用于钦定一个范围,in操作符后跟由逗号分隔的官方值,那几个值必得括在圆括号中。not操作符表示否定其后所跟的条件,其并未有单独采纳。

操作符优先级示范:

有这么一条命令须要:查询testworkers表的职员和工人工号<10003仍旧工号>10004的同时年纪>30的职员和工人的人名。借使依照上面命令1的方法来写:

命令1:【select name from testworkers where id<10003 or id>10004 and age>30;】

则该命令中就算or写在前头,但是实际上推行中and的初期级更高,会先施行and操作符,因而该命令的乐趣实际上是:查询testworkers表的工号>10004且年纪>30的职员和工人工号以至工号<10003的职工工号。

斩草除根措施是采取()来将操作符进行鲜明的分组,如下:

命令2:【select name from testworkers (where id<10003 or id>10004) and age>30;】

12.通配符查询:通配符是用来同盟生龙活虎部分数指标特殊字符,通常代表着某种特殊格局,通过LIKE操作符搭配通配符能够查询某风流洒脱类特定方式的多少,常用的通配符有:

通配符 含义

% 任何字符现身狂妄次数

_ 任何字符现身二次

[] 钦赐贰个字符集

留意:上述各样查询命令的格局只是每一种形式的最基本气象,在事实上行使中会现身两种方式一同使用的事态,要小心结合使用。

示例:

询问testworkers表的全体内容:【select * from testworkers;】

查询testworkers表的一切工号:【select id from testworkers;】

询问testworkers表的整整工号和姓名:【select id,name from testworkers;】

询问testworkers表的姓名列的第3行到第4行:【select name from testworkers limit 2 offset 4;】

查询testworkers表的富有差别年龄:【select distinct name from testworkers;】

查询testworkers表的年龄并按年龄实行升序排序:【select age from testworkers order by age;】

查询testworkers表的职工姓名并按他们的年纪升序排序:【select name from testworkers order by age;】

询问testworkers表的工作者工号、姓名和年龄,并按年龄进行排序,当年龄相像有时候则依据工号实行排序:【select id,name,age from testworkers order by age,id;】

同上一条命令,用列的职位表明:【select id,name,age from testworkers order by 3,1;】

询问testworkers表的职工工号和姓名并按他们的年纪降序排序:【select id,name from testworkers order by age desc;】

查询testworkers表的有着年龄小于40的职工工号和姓名并按岁数升序进行排序:【select id ,name from testworkers where age<40 order by age;】

询问testworkers表的工号在10002和10004时期的职工工号:【select id from testworkers where id between 10002 and 10004;】(输出10002、10003、10004,可以预知mysql对between语句的拍卖是一个包蕴两端的闭区间卡塔尔

查询testworkers表的装有工号小于10005的男子员工的工号和人名,并遵照他们的年龄进行降序排序:【select id,name from testworkers where id<10005 and sex='male' order by age desc;】

查询testworkers表的持有人名在为axx、或cxx、或、dxx之间的男人士工的工号和姓名并根据岁数进行降序排序,当岁数相同不日常候依据工号举行降序排序:【select id,name from testworkers where name in ('axx','cxx','dxx') and not sex='female' order by age desc,id desc;】

询问testworkers表的具盛名字以cx起头的职工的工号:【select id from testworkers where name like 'cx%';】

?更新数据:

更新全部行的某生龙活虎单列:【update 表名 set 列名=新值;】

改良全部行的多列:【update 表名 set 列名1=新值1,列名2=新值2......列名n=新值n;】

更新特定行的某生龙活虎单列:【update 表名 set 列名=新值 where 更新规范;】

更新特定行的多列:【update 表名 set 列名1=新值1,列名2=新值2......列名n=新值n where 更新标准;】

示例:

将testworkers表的全体职工的性别改为male:【update testworkers set sex="male";】

将testworkers表的具有职工的年龄改为0:【update testworkers set age=0;】

将testworkers表的装有工号小于等于10004的职员和工人的年华改为30:【update testworkers set age=30 where id<=10004;】

将testworkers表的享有姓名在axx-cxx之间的职工的年纪改为35且性别改为female:【update testworkers set age=35,sex='female' where name between 'axx' and 'cxx';】

?删除数据:

剔除全体行:【delete from 表名;】,常常当想要清空表时不会接受上述命令,而是接纳【turncate table 表名;】该命令比选择delete清空时越来越快。

去除特定行:【delete from 表名 where 删除条件;】

示例:

删除testworkers表的有着年龄为0的行:【delete from testworkers where age=0;】

    删除testworkers表的全体内容:【truncate table testworkers;】

7卡塔 尔(英语:State of Qatar)数据表的变动操作:

只顾:上述6卡塔 尔(英语:State of Qatar)的剧情是对数据内容的操作,数据表自己格式不改变,此部分的吩咐是对数据表格式的更换,和5卡塔 尔(英语:State of Qatar)是同类型的操作。

表名改正:【rename 旧表名 to 新表名】

加多列:【alter table 表名 add 列名 列申明 after 插入地点;】after能够轻巧,当省略时表示在表的末尾加多列

改革列:【alter table 表名 change 列名称 列新名称 新评释;】

删除列:【alter table 表名 drop 列名称;】

示例:

将testworkers名称校勘为test:【rename table testworkers to test;】

在testworkers表的尾声增多一列work_age:【alter table testworkers add work_age tinyint unsigned;】

在testworkers表的age列之后新扩充一列department列:【alter table testworkers add department varchar(100) not null after age;】

将testworkers表的id列校勘为work_id,数据类型为smallint:【alter table testworkers change id work_id smallint unsigned not null;】

删除testworkers表中的department列:【alter table testworkers drop department;】

1.4 mysql脚本的选用:

sql脚本是包含风度翩翩到五个sql命令的sql语句,大家能够将这么些sql脚本放在叁个文件文件中(称之为“sql脚本文件”卡塔尔,然后经过有关的命令奉行那么些sql脚本文件,轻便的明白sql正是sql语句的批处理公事。

示例:

1.创建sql脚本:vim test.sql;

2.对sql脚本进行编写制定,内容为:

create database test2;

use test2;

create table test

(

          id int unsigned not null  primary key,

          name char(8) not null,

          sex char(4) not null

);

3.执行sql脚本:mysql -u root -p11111 -e "source /root/test.sql"

4.查询核算:步入mysql后show databases发掘test2库已经创制,选拔test2库后再show tables命令可知test表也曾经创办。

1.5 c/c++程序中经过mysql的c api对mysql举行增加和删除改查的操作:

Mysql针对各样语言提供了编制程序接口以供在代码中落到实处对mysql数据库的访谈与操作,此中针对c有c api,针对c++有Connector C++接口,在那之中c api的运用广为人知,由此主要学习了什么行使c api在代码中对数据库举行操作。

参照链接:

Mysql的c api提供了大多效率的构造和函数,此中比较常用的有:

MYSQL结构,举办mysql操作的底工结构;

MYSQL_RES:结果集;

MYSQL_FIELD:列信息;

MYSQL_ROW:行信息;

mysql_real_connect( ):mysql数据库的连天;

mysql_init():mysql数据库的伊始化;

mysql_query():实行sql语句的函数,创设库、创制表、添增加少、查询数据都可用此函数完成;

mysql_real_query():包涵二进制数据的操作必须用这么些,此外real的速度更加快;

mysql_store_result():查询结果的仓库储存;

mysql_num_田野先生s():重临结果集的列的个数;

mysql_fetch_田野():重返贰个表列的音信;

mysql_fetch_row():从结果聚焦获取下生机勃勃行数据;

为了能完美精通代码中经过api对数据库调整的为主选择,作者通过在linux情状下编写制定测量试验代码,并编写翻译运维,通过对打字与印刷消息检查命令的运行状态,最后编写翻译运维并经过测量试验,达成对此部分剧情的读书。

切切实实编写调节和测验和验证步骤如下,测量试验代码另附:

1.代码编纂:vim test.cpp,编写c++代码文件。

2.代码编写翻译:g++ test.cpp -o test -lmysqlclient,这里要留意对mysql的操作须求编写翻译情状正视,需增多-lmysqlclient链接mysql库编写翻译才可透过。

3.代码推行:./test,实践编写翻译链接后的可推行文件。

4.结果检验:

1卡塔尔在代码中数据库的连接和创制通过函数的重返值实行认证,在命令行中输出信息。

2)创设了数据库之后,代码首先创造叁个test3表并插入了三行新闻,通过输出消息可以预知此部分完结。

3卡塔尔国根据条件将test3表中的10087号职员和工人的性别改为female、年龄改为33。

4卡塔 尔(英语:State of Qatar)将10043号工作者的新闻从表中删除。

本文由 数据库发布,转载请注明来源:mysql基础教程,欢迎纠正