Vue基础入门(上)

news2025/1/12 4:06:16
<script src="https://unpkg.com/vue@next"></script>

从面向dom编程到面向数据编程

输入显示列表

const app=Vue.createApp({
        data(){
            return{
                inputValue:'',
                list:[]
            }
        },
        methods:{
            handleAddItem(){
                this.list.push(this.inputValue);
                this.inputValue='';
            }
        },
        template:
            `
                <div>
                    <input v-model="inputValue" />
                    <button
                        v-on:click="handleAddItem"
                        v-bind:title="inputValue">
                        增加
                    </button>
                    <ul>
                        <todo-item v-for="(item,index) of list" v-bind:content="item" v-bind:index="index"/>   
                    <ul>    
                </div>
            `
    });

    
    app.component('todo-item',{
        props:['content','index'],
        template:'<li>{{index}}--{{content}}</li>'
    });

    app.mount('#root');

反转字符串

    Vue.createApp({
        data(){
            return{
                str:'hello world'
            }
        },
        methods:{
            handleReverse(){
                this.str=this.str.split('').reverse().join('');
            }
        },
        template:
            `
                <div>
                    {{str}}
                    <button v-on:click="handleReverse">反转字符串</button> 
                </div>
            `

    }).mount('#root');

createApp表示创建一个Vue应用,存储到app变量中

传入的参数表示,这个应用最外层的组件,应该如何展示

MVVM设计模式,M->Model 数据,V->View 视图,VM-> ViewModel视图数据连接

生命周期函数(8个)

// 生命周期函数 在某一时刻自动执行的函数
    const app = Vue.createApp({
        data() {
            return {
                message: 'hello world'
            }
        },
        beforeCreate(){
            // 在实例生成之前自动执行的函数
            console.log('beforeCreate');
        },
        created(){
            // 在实例生成之后自动执行的函数
            console.log('created');
        },
        beforeMount(){
            // 在组件内容被渲染到页面之前自动执行的函数
            console.log(document.getElementById('root').innerHTML,'beforeMounted');
        },
        mounted(){
            // 在组件内容被渲染到页面之后自动执行的函数 
            console.log(document.getElementById('root').innerHTML,'mounted');
        },
        beforeUpdate(){
            // 在data中数据发生变化时,自动执行的函数
            console.log(document.getElementById('root').innerHTML,'beforeUpdate');
        },
        updated(){
            // 在data中数据发生变化时,且重新渲染页面后,自动执行的函数
            console.log(document.getElementById('root').innerHTML,'updated');
        },
        beforeUnmount(){
            // 当Vue应用(实例)失效时,自动执行的函数
            console.log(document.getElementById('root').innerHTML,'beforeUnmount');
        },
        unmounted(){
            // 当Vue应用(实例)失效时,且DOM完全销毁之后,自动执行的函数
            console.log(document.getElementById('root').innerHTML,'unmounted');
        },
        template: `<div>{{message}}</div>`
    });
    const vm=app.mount('#root');

 

插值表达式{{}}

const app = Vue.createApp({
        data() {
            return {
                message: '<strong>hello world</strong>'
            }
        },
        template: `<div>{{message}}</div>`
    });
    const vm=app.mount('#root');

 结果却显示包含html标签的变量,这时想要显示加粗的变量,我们需要在模板里加上v-html指令即可

const app = Vue.createApp({
        data() {
            return {
                message: '<strong>hello world</strong>'
            }
        },
        template: `<div v-html="message"></div>`
    });
    const vm=app.mount('#root');

 

添加title属性需要添加v-bind指令,此时页面上鼠标悬停在hello world时会出现hello world标题

v-bind:title简写成:title 

const app = Vue.createApp({
        data() {
            return {
                message: 'hello world'
            }
        },
        template: `<div v-bind:title="message">hello world</div>`
    });
    const vm=app.mount('#root');

v-bind我们还可以结合输入框使用

const app = Vue.createApp({
        data() {
            return {
                disable:false
            }
        },
        template: `<input v-bind:disabled="disable"/>`
    });
    const vm=app.mount('#root');

注意:模板可以使用v-once指令使变量只渲染第一次时的值,之后修改变量的值不会跟随变化 

事件绑定v-on:click() 简写@click

结合动态属性:[变量] 

const app = Vue.createApp({
        data() {
            return {
                message:'hello world',
                name:'title',
                event:'click'
            }
        },
        methods:{
            handleClick(){
                alert('click');
            }
        },
        template: `<div :[name]="message" @[event]="handleClick">{{message}}</div>`
    });
    const vm=app.mount('#root');

阻止默认行为@click.prevent="handleClick"

const app = Vue.createApp({
        data() {
            return {
                message:'hello world'
            }
        },
        methods:{
            handleClick(){
                alert('click');
                //e.preventDefault();
            }
        },
        template: 
        `
            <form action="http://www.baidu.com" @click.prevent="handleClick">
                <button type="submit">提交</button>
            </form>
        `
    });
    const vm=app.mount('#root');

computed计算属性

const app = Vue.createApp({
        data() {
            return {
                message:'hello world'
            }
        },
        computed:{
            // 当计算属性依赖的内容发生变化时,方法才会重新执行计算
            total(){
                return Date.now();
            }
        },
        methods:{
            // 只要页面重新渲染,方法就会执行
            formatString(string){
                return string.toUpperCase();
            },
            getTotal(){
                return Date.now();
            }
        },
        template: 
        `
            <div>{{formatString(message)}} {{total}}</div>
            <div>{{formatString(message)}} {{getTotal()}}</div>
        `
    });
    const vm=app.mount('#root');

侦听器watch(通常异步操作使用)(监听对应属性)

const app = Vue.createApp({
        data() {
            return {
                message:'hello world',
                count:2,
                price:5,
                newTotal:10
            }
        },
        // 监听器
        watch:{
            // 当价格发生变化才会执行的函数
            price(current,prev){
                this.newTotal= current*this.count;
            }
        },
        computed:{
            // 当计算属性依赖的内容发生变化时,方法才会重新执行计算 建议使用因为有缓存、简洁
            total(){
                return this.price*this.count;
            }
        },
        methods:{
            // 只要页面重新渲染,方法就会执行
            formatString(string){
                return string.toUpperCase();
            },
            getTotal(){
                return this.price*this.count;
            }
        },
        template: 
        `
            <div>{{formatString(message)}} {{total}}</div>
            <div>{{formatString(message)}} {{getTotal()}}</div>
            <div>{{formatString(message)}} {{newTotal}}</div>
        `
    });
    const vm=app.mount('#root');

改变字符串样式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>lesson 5</title>
    <script src="https://unpkg.com/vue@next"></script>
    <style>
        .red{
            color: red;
        }
        .green{
            color: green;
        }
        .blue{
            color: blue;
        }
        .brown{
            color: brown;
        }
    </style>
</head>
<body>
    <div id="root"></div>
</body>
<script>
    // 改变样式
    // 1字符串/2对象/3数组
    const app = Vue.createApp({
        data(){
            return{
                classString:'green',
                classObject:{
                    'red':true,
                    'green':true,
                    'blue':true
                },
                classArray:['red','blue','green',{brown:true}]
            }
        },
        template: 
        `
            <div :class="classString">Hello World</div>
            <div :class="classArray">Hello World</div>
            <div :class="classObject">Hello World</div>
        `
    });
    const vm=app.mount('#root');
</script>

</html>

父元素包括多个子元素注意:$attrs.class使用 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>lesson 5</title>
    <script src="https://unpkg.com/vue@next"></script>
    <style>
        .red{
            color: red;
        }
        .green{
            color: green;
        }
        .blue{
            color: blue;
        }
        .brown{
            color: brown;
        }
    </style>
</head>
<body>
    <div id="root"></div>
</body>
<script>
    // 改变样式
    // 1字符串/2对象/3数组
    const app = Vue.createApp({
        data(){
            return{
                classString:'red',
                classObject:{
                    'red':true,
                    'green':true,
                    'blue':true
                },
                classArray:['red','blue','green',{brown:false}]
            }
        },
        template: 
        `
            <div :class="classString">
                Hello World
                <demo class="green" />
            </div>
        `
    });
    app.component('demo',{
        template:
        `
            <div :class="$attrs.class">one</div>
            <div>two</div>
        `
    });
    const vm=app.mount('#root');
</script>

</html>

行内样式使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>lesson 5</title>
    <script src="https://unpkg.com/vue@next"></script>
    <style>
        .red{
            color: red;
        }
        .green{
            color: green;
        }
        .blue{
            color: blue;
        }
        .brown{
            color: brown;
        }
    </style>
</head>
<body>
    <div id="root"></div>
</body>
<script>
    // 改变样式
    // 1字符串/2对象/3数组
    const app = Vue.createApp({
        data(){
            return{
                classString:'red',
                classObject:{
                    'red':true,
                    'green':true,
                    'blue':true
                },
                classArray:['red','blue','green',{brown:false}],
                styleString:'color:yellow;background:orange',
                // 行内样式我们使用对象存储可读性更高
                styleObject:{
                    color:'orange',
                    background:'purple'
                }
            }
        },
        template: 
        `
            <div :style="styleObject">
                Hello World
            </div>
        `
    });
    app.component('demo',{
        template:
        `
            <div :class="$attrs.class">one</div>
            <div>two</div>
        `
    });
    const vm=app.mount('#root');
</script>

</html>

v-if和v-show区别

const app = Vue.createApp({
        data(){
            return{
                show:false
            }
        },
        template: 
        `
            <div v-if="show">Hello World</div>
            <div v-show="show">Bye World</div>
        `
    });
    const vm=app.mount('#root');

频繁需要修改元素的话我们建议使用v-show,因为不会把元素销毁掉 

const app = Vue.createApp({
        data(){
            return{
                conditionOne:false,
                conditionTwo:true
            }
        },
        template: 
        `
            <div v-if="conditionOne">if</div>
            <div v-else-if="conditionTwo">else if</div>
            <div v-else>else</div>
            
        `
    });
    const vm=app.mount('#root');

v-for用法

数组和对象使用 注意:v-for优先级比v-if优先级高,所以如果要判断的话需要嵌套标签但是我们发现此时多了个div标签,这里我们使用小技巧将外面的div标签替换为template标签相当于占位符

const app = Vue.createApp({
        data(){
            return{
                listArray:['dell','lee','teacher'],
                listObject:{
                    firstName:'dell',
                    lastName:'lee',
                    job:'teacher'
                }
            }
        },
        methods:{
            handleAddBtnClick(){
                // 1使用数组的变更函数
                //this.listArray.push('hello');结尾增加
                //this.listArray.pop();结尾删除
                //this.listArray.shift();开头删除
                //this.listArray.unshift('hello');//开头增加
                // this.listArray.reverse();

                // 2直接替换数组
                // this.listArray=['bye','world'];
                // this.listArray=['bye','world'].filter(item=>item==='bye');

                // 3更新数组内容
                // this.listArray[1]='bye';
                this.listObject.age=100;
                this.listObject.sex='male';
            }
        },
        template: 
        `
            <div>
                <template v-for="(value,key,index) in listObject" :key="index">
                    <div v-if="key!=='lastName'">
                        {{value}}--{{key}}--{{index}}
                    </div>
                </template>
                <div v-for="item in 10">{{item}}</div>
                <button @click="handleAddBtnClick">新增</button>    
            </div>
        `
    });
    const vm=app.mount('#root');

事件

当调用多个函数的时候,我们不能像以前一样直接写引用名,而是需要再加上()逗号分开才生效 

const app = Vue.createApp({
        data(){
            return{
                counter: 0
            }
        },
        methods:{
            handleBtnClick(num,event){
                console.log(event.target);
                this.counter+=num;
            }
        },
        template: 
        `
            <div>
                {{counter}}
                <button @click="handleBtnClick(2,$event)">新增</button>    
            </div>
        `
    });
    const vm=app.mount('#root');

 

const app = Vue.createApp({
        data(){
            return{
                counter: 0
            }
        },
        methods:{
            handleBtnClick(){
                alert('1');
            },
            handleBtnClick1(){
                alert('2');
            },
        },
        template: 
        `
            <div>
                {{counter}}
                <button @click="handleBtnClick(),handleBtnClick1()">新增</button>    
            </div>
        `
    });
    const vm=app.mount('#root');

阻止冒泡(向外传播)@click.stop 

const app = Vue.createApp({
        data(){
            return{
                counter: 0
            }
        },
        methods:{
            handleBtnClick(){
                this.counter+=1;
            },
            handleDivClick(){
                alert('div click');
            }
        },
        template: 
        `
            <div>
                {{counter}}
                <div @click="handleDivClick">
                    <button @click.stop="handleBtnClick">新增</button>    
                </div>
            </div>
        `
    });
    const vm=app.mount('#root');

点击自己标签才显示@click.self

const app = Vue.createApp({
        data(){
            return{
                counter: 0
            }
        },
        methods:{
            handleBtnClick(){
                this.counter+=1;
            },
            handleDivClick(){
                alert('div click');
            }
        },
        template: 
        `
            <div>
                <div @click.self="handleDivClick">
                    {{counter}}
                    <button @click="handleBtnClick">新增</button>    
                </div>
            </div>
        `
    });
    const vm=app.mount('#root');

事件修饰符:注意标签@click.prevent阻止默认行为发生、@click.capture捕获阶段(从外到内)默认是冒泡阶段(从内到外) 、@click.once只能点击一次

按键和鼠标修饰符

按键:enter,tab,delete,esc,up,down,left,right

鼠标:left,right,middle

const app = Vue.createApp({
        data(){
            return{
                counter: 0
            }
        },
        methods:{
            handleKeyDown(){
                console.log('keydown');
            }
        },
        template: 
        `
            <div>
                <input @keydown.delete="handleKeyDown"/>
            </div>
        `
    });
    const vm=app.mount('#root');
const app = Vue.createApp({
        data(){
            return{
                counter: 0
            }
        },
        methods:{
            handleClick(){
                console.log('click');
            }
        },
        template: 
        `
            <div>
                <div @click="handleClick">123</div>
            </div>
        `
    });
    const vm=app.mount('#root');

双向绑定

复选框checkbox和单选框radio 

// input,textarea,checkbox,radio
    const app = Vue.createApp({
        data(){
            return{
                message:[]
            }
        },
        template: 
        `
            <div>
                {{message}}
                jack <input type="checkbox" value="jack" v-model="message"/>
                jessica <input type="checkbox" value="jessica" v-model="message"/>
                karry <input type="checkbox" value="karry" v-model="message"/>
            </div>
        `
    });
    const vm=app.mount('#root');

 

// input,textarea,checkbox,radio
    const app = Vue.createApp({
        data(){
            return{
                message:''
            }
        },
        template: 
        `
            <div>
                {{message}}
                jack <input type="radio" value="jack" v-model="message"/>
                jessica <input type="radio" value="jessica" v-model="message"/>
                karry <input type="radio" value="karry" v-model="message"/>
            </div>
        `
    });
    const vm=app.mount('#root');

 

列表框

const app = Vue.createApp({
        data(){
            return{
                message:[],
                options:[{
                    text:'A',value:{value:'A'}
                },{
                    text:'B',value:{value:'B'}       
                },{
                    text:'C',value:{value:'C'}
                }]
            }
        },
        template: 
        `
            <div>
                {{message}}
                <select v-model="message" multiple>
                    <option v-for="item in options" :value="item.value">{{item.text}}</option>
                </select>
            </div>
        `
    });
    const vm=app.mount('#root');

 

const app = Vue.createApp({
        data(){
            return{
                message:'world',
            }
        },
        template: 
        `
            <div>
                {{message}}
                <input type="checkbox" v-model="message" true-value="hello" false-value="world"/>
            </div>
        `
    });
    const vm=app.mount('#root');

 world表示没选上的值

注意:v-model.lazy等鼠标移开输入框点击外面一下才会双向绑定  v-model-trim去除字符串首尾空格

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/436271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(一) nvidia jetson orin nvcsi tegra-capture-vi camera相关内容梳理 之 vi相关代码分析

背景:对于nvidia 的jetson orin 的camera,其内部是如何实现的尼?硬件方面的pipeline是怎么关联的,其内部有哪些camera相关的modules?对于这些modules,软件上又是怎么去实现?设备树如何去抽象这些modules?分析完后,给我们一个camera sensor,如何进行bring up?本文将会…

什么是 AUTOSAR C++14?

总目录链接>> AutoSAR入门和实战系列总目录 总目录链接>> AutoSAR BSW高阶配置系列总目录 文章目录 什么是 AUTOSAR C14&#xff1f;AUTOSAR C14 规则和偏差静态分析工具可以完全支持自动 什么是 AUTOSAR C14&#xff1f; 它是 C 版本 14 (ISO/IEC 14882:2014…

Mac安装Stable Diffusion教程【超详细教程】附带安装包

Mac安装Stable Diffusion教程 本机配置Mac安装Stable Diffusion教程 配带官方说明重要注意事项安装所需文件已上传网盘自动安装新安装&#xff1a; 自动安装现有安装&#xff1a; 下载稳定扩散模型故障排除Web UI无法启动&#xff1a;性能不佳&#xff1a; 本机配置 电脑&…

DJ4-3 路由器的工作原理

目录 一、路由器的整体结构 二、输入端口的功能 1. 三大模块 2. 查找与转发模块 三、交换结构 1. 经内存的交换结构 2. 经总线的交换结构 3. 经交换矩阵交换结构 四、输出端口的功能 五、排队 1. 输入端口排队 2. 输出端口排队 一、路由器的整体结构 路由器的两个…

一秒钟给硬盘文件做个树状结构目录

一秒钟给硬盘文件做个树状结构目录 一、背景 对于长时间坐在电脑前的打工人来说&#xff0c;若没有养成良好文件分类习惯的话&#xff0c;年终整理电脑文件绝对是件头疼的事情。 给磁盘文件做个目录&#xff0c;一目了然文件都在哪里&#xff1f;想想都是件头疼的事情。 对于…

golang 实现 ldif 数据转成 json 初探

theme: Chinese-red 「这是我参与11月更文挑战的第 8 天&#xff0c;活动详情查看&#xff1a;2021最后一次更文挑战」 上一篇我们分享了如何将 ldif 格式的数据&#xff0c;转换成 json 数据的思路并画相应的简图 这一次&#xff0c;我们就来实现一下 实现方式如下&#xff…

P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

[国家集训队]Crash的数字表格 / JZPTAB 题目描述 今天的数学课上&#xff0c;Crash 小朋友学习了最小公倍数&#xff08;Least Common Multiple&#xff09;。对于两个正整数 a a a 和 b b b&#xff0c; lcm ( a , b ) \text{lcm}(a,b) lcm(a,b) 表示能同时整除 a a a 和…

『pyqt5 从0基础开始项目实战』10.日志记录 鼠标右键打开(保姆级图文)

目录 导包和框架代码实现右键功能实现日志展示弹窗编写一个日志文件用于测试日志展示完整代码main.pythreads.pydialog.py 总结 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 导包和…

Python常用练习小例子

Python常用练习小例子 1、输出九九乘法表 源码如下&#xff1a; # 九九乘法表 for i in range(1, 10):for j in range(1, i1):print({}x{}{}\t.format(i, j, i*j), end)print() # 换行&#xff0c;相当于print(end\n) 其中&#xff0c;rint({}x{}{}\t.format(i, j, i*j), e…

Kubespray v2.21.0 离线部署 Kubernetes v1.25.6 集群

文章目录 1. 前言2. 预备条件3. 配置代理4. 下载介质5. 初始化配置6. 安装部署工具6.1 配置 venv 部署环境6.2 配置容器部署环境 7. 配置互信8. 编写 inventory.ini9. 编写 offline.yml10. 部署 offline repo11. 部署 kubernetes 1. 前言 Kubespray 是 Kubernetes incubator 中…

【Python合集】程序员系列代码之“这么好的天气应该去放风筝,而不是在搬砖,好想去放风筝哦~”(附完整代码)

导语 ☽ ☽ ☽ ☽ ☽ ☽ 文案丨April 19th, 2023 ☆ ☽ ☽☽ ☽☽ ☽ 江滩边摇摇晃晃的风筝 是春日越冬归来的信号 风筝蹦蹦跳跳 看盎然春意四处热闹阿姨路过菜摊子 带把香椿回家炒蛋细子摘桑 被酸得直口水嗲嗲裹着棉袄 托起霸缸到处晒大阳妹子没管倒春寒 提前换上短…

HttpServletRequest

1、HttpServletRequest对象 在Servlet API中&#xff0c;定义了一个HttpServletRequest接口&#xff0c;它继承自ServletRequest接口&#xff0c;专门用于封装HTTP请求消息 1.1 获取请求行信息的相关方法 当访问Servlet时&#xff0c;请求消息的请求行中会包含请求方法、请求…

Spring入门案例--bean实例化

bean实例化 对象已经能交给Spring的IOC容器来创建了&#xff0c;但是容器是如何来创建对象的呢? 就需要研究下bean的实例化过程 &#xff0c;在这块内容中主要解决两部分内容&#xff0c;分别是 bean是如何创建的实例化bean的三种方式&#xff0c; 构造方法,静态工厂 和 …

USB TO SPI / USB TO I2C 软件概要 1 --- 专业版调试器

所需设备&#xff1a; 1、USB转SPI_I2C适配器(专业版); 软件概述&#xff1a; SPI类: USB TO SPI 1.0-Slave SPI从机软件&#xff0c;适合单步调试&#xff0c;支持SPI工作模式0、1、2、3&#xff0c;自动跟随主机通讯速率&#xff0c;自动接收数据&#xff1b; USB TO SP…

21、指标监控

文章目录 1、SpringBoot Actuator1、简介2、1.x与2.x的不同3、如何使用4、可视化 2、Actuator Endpoint1、最常使用的端点2、Health Endpoint3、Metrics Endpoint4、管理Endpoints1、开启与禁用Endpoints2、暴露Endpoints 3、定制 Endpoint1、定制 Health 信息2、定制info信息1…

springboot集成nacos配置管理

官方文档&#xff1a;Nacos Spring Boot 快速开始 个人实践&#xff1a; Namespace定义环境&#xff0c;例如&#xff1a;开发环境、测试环境、生产环境。 Group定义不同的应用。 DataId用来区分配置&#xff0c;例如&#xff1a;mysql配置&#xff0c;redis配置&#xff0…

web集群

1. 简述静态网页和动态网页的区别 1.更新和维护&#xff1a; 静态网页内容一经发布到网站服务器上&#xff0c;无论是否有用户访问&#xff0c;这些网页内容都是保存在网站服务器上的。如果要修改网页的内容&#xff0c;就必须修改其源代码&#xff0c;然后重新上传到服务器上…

新一代异步IO框架 io_uring | 得物技术

1.Linux IO 模型分类 相比于kernel bypass 模式需要结合具体的硬件支撑来讲&#xff0c;native IO是日常工作中接触到比较多的一种&#xff0c;其中同步IO在较长一段时间内被广泛使用&#xff0c;通常我们接触到的IO操作主要分为网络IO和存储IO。在大流量高并发的今天&#xff…

【golang学习笔记】——(三)golang vscode编译第一个程序

这里有一个盲区的坑&#xff0c;先埋下&#xff0c;待会再讲。 一、工程创建 首先是在一个自己需要的文件夹下创建一个.go空文件&#xff0c;老传统&#xff0c;这里就是hellowrold.go&#xff0c;致敬原神Brian Kernighan&#xff08;1978年出版的《The C Programming Langua…

数据库----------自增长约束、非空约束

目录 1.自增长约束(auto_increment) 1.概念 2.特点 3.指定自增字段初始值 4.delete和truncate在删除后自增列的变化 2.非空约束(not null) 1.概念 2.语法 3.添加非空约束 4.删除非空约束 1.自增长约束(auto_increment) 1.概念 在MysQL中&#xff0c;当主键定义为自增…