面试必知的MySQL数据库知识

Posted 城子特讯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试必知的MySQL数据库知识相关的知识,希望对你有一定的参考价值。

1、数据库

       数据库是为实现一定的目的按某种规则组织起来的数据的集合, 换句话说,数据库就是存储数据的库,其中,mysql是一种关联数据库管理系统。由于其体积小、速度快、成本低受到了许多企业开发人员和普通用户的喜爱和支持。

2、数据库CURD 

2.1、创建数据库

创建一个名为mydb1的数据库create database mydb1;
创建一个使用utf-8字符集的mydb2数据库create database mydb2 set utf8;
创建一个带校对规则并使用utf-8字符集的mydb3数据库create database mydb3 set utf8 collate utf8_general_ci;

 2.2、查看数据库

显示所有数据库show database;

 2.3、修改数据库

修改mydb1的字符集为utf8alter database mydb1 character set utf8;

 2.4、删除数据库

删除数据库mydb2drop database mydb2;

3、表的CURD

 3.1、创建表

创建表t1create table t1(id int,name varchar(20))注:在表创建前,必须选择数据库use mydb1;
查看选择数据库中的表show table;查看表的结构desc tablename;

 3.2、mysql数据类型

 3.3、查看表

查看所有表show table;查看指定表的创建语句show create table t1;

 3.3、修改表

修改表名:rename table t1 to t2;增加一个字段alter table t1 add column h1 double;修改一个字段alter table t1 modify column h1 float;删除一个字段alter table t1 drop column h1;修改表的字符集为utf8alter table t1 character set utf8

 3.3、删除表

删除表t1drop table t1;

4、数据的CURD

 4.1、创建数据

创建一个员工表,并向表中添加一些记录create table employee(id int,name varchar(20),sex int,birthday date,salary double);insert into employee(id,name,sex,birthday,salary) values(2,'mimi',1,'1984-02-22',10000);insert into employee values(1,'charles',1,'1999-09-27',20000);

4.2、检索数据

select id, name as "名字", salary "月薪", salary*12 年薪  from employee where id >=2

4.3、修改数据

将所有员工薪水都增加1000元update employee set salary=salary+500;将小王的员工薪水修改为20000元update employee set salary=20000 where name='小王';

4.4、删除数据

删除表中姓名为小王的数据delete from employee where name='小王';删除表中所有数据delete from employee; truncate删除表中数据(无条件,效率高)truncate employee;

5、表的约束

定义主键约束(不允许为空,不允许重复) primary key:定义主键自动增长 auto_increment定义唯一约束:unique定义非空约束 not null定义外键约束 constraint ordersid_FK foreign key(ordersid) references orders(id)删除主键:alter table tablename drop primary key ;

6、MySQL的API函数

6.1、初始化

MYSQL *mysql_init(MYSQL *mysql)错误处理unsigned int mysql_errno(MYSQL *mysql)

例子:

#include <stdio.h>#include "mysql.h"int main(void)  int ret = 0;  MYSQL *mysql = mysql_init(NULL);  if (mysql == NULL)   ret = mysql_errno(mysql);  printf("mysql_init error:%d\\n", ret);  return ret;    printf("init ok\\n");  return 0;

6.2、建立连接

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd,const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag);

 6.3、执行SQL

int mysql_query(MYSQL *mysql, const char *stmt_str)char *psql = "select * from emp";ret = mysql_query(mysql, psql);

6.4、获取结果

MYSQL_RES *mysql_store_result(MYSQL *mysql)MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

6.5、释放内存

void mysql_free_result(MYSQL_RES *result)

6.6、获取列数

unsigned int mysql_field_count(MYSQL *mysql)       从mysql句柄中获取有多少列unsigned int mysql_num_fields(MYSQL_RES *result)   从返回的结果集中获取有多少列int num = mysql_field_count(connect);   while (row = mysql_fetch_row(result))   for (i = 0; i < num; i++)   printf("%s\\t", row[i]);    printf("\\n");  

6.7、获取表头

MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)   全部获取MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)   获取单个例子:MYSQL_FIELD *fields = NULL;  fields = mysql_fetch_fields(result);  //得到表头的结构体数组  for (i = 0; i < num; i++)       //已通过 mysql_field_count  获取了总列数  printf("%s\\t", fields[i].name);  //每一列的列名保存在name成员中     

6.6、关闭连接

void mysql_close(MYSQL *mysql)

7、初始化错误问题 (makefile)

64位Linux环境下,动态库配置不完整。需手动指定编译所用的动态库。

src = $(wildcard *.c)target = $(patsubst %.c, %, $(src))inc_path = /usr/include/mysql/lib_path = /usr/lib64/mysql/all: $(target)%:%.c  gcc $< -o $@ -I$(inc_path) -L$(lib_path) -lmysqlclient -lstdc++ -lpthread -ldl -lrtclean:  -rm -rf $(target).PHONY: all clean

以上是关于面试必知的MySQL数据库知识的主要内容,如果未能解决你的问题,请参考以下文章

15个必知的Mysql索引失效场景,别再踩坑了

15个必知的Mysql索引失效场景,别再踩坑了

面试必知的SQL数据库命令

面试必知的SQL数据库命令

Python工程师求职必知的经典面试题!

Python工程师求职必知的经典面试题分享